[Redux] React Todo List Example (Adding a Todo)

來源:互聯網
上載者:User

標籤:

Learn how to create a React todo list application using the reducers we wrote before.

 

/** * A reducer for a single todo * @param state * @param action * @returns {*} */const todo = ( state, action ) => {    switch ( action.type ) {        case ‘ADD_TODO‘:            return {                id: action.id,                text: action.text,                completed: false            };        case ‘TOGGLE_TODO‘:            if ( state.id !== action.id ) {                return state;            }            return {                ...state,                completed: !state.completed            };        default:            return state;    }};/** * The reducer for the todos * @param state * @param action * @returns {*} */const todos = ( state = [], action ) => {    switch ( action.type ) {        case ‘ADD_TODO‘:            return [                ...state,                todo( undefined, action )            ];        case ‘TOGGLE_TODO‘:            return state.map( t => todo( t, action ) );        default:            return state;    }};/** * Reducer for the visibilityFilter * @param state * @param action * @returns {*} */const visibilityFilter = ( state = ‘SHOW_ALL‘,                           action ) => {    switch ( action.type ) {        case ‘SET_VISIBILITY_FILTER‘:            return action.filter;        default:            return state;    }};/** * combineReducers: used for merge reducers togethger * createStore: create a redux store */const { combineReducers, createStore } = Redux;const todoApp = combineReducers( {    todos,    visibilityFilter} );const store = createStore( todoApp );/** * For generate todo‘s id * @type {number} */let nextTodoId = 0;/** * React related */const {Component} = React;class TodoApp extends Component {    render() {        return (            <div>                <input ref={        (node)=>{            this.input = node        }    }/>                <button onClick={        ()=>{        //After clicking the button, dispatch a add todo action            store.dispatch({                type: ‘ADD_TODO‘,                id: nextTodoId++,                text: this.input.value            })            this.input.value = "";        }    }>ADD todo                </button>                <ul>                    //loop thought the todo list                    {this.props.todos.map( ( todo )=> {                        return <li key={todo.id}>{todo.text}</li>                    } )}                </ul>            </div>        );    }}const render = () => {    ReactDOM.render(        <TodoApp todos={store.getState().todos}/>,        document.getElementById( ‘root‘ )    );};//Every time, store updated, also fire the render() functionstore.subscribe( render );render();

 

<!DOCTYPE html><html><head>  <script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.0.4/redux.js"></script>   <script src="https://fb.me/react-0.14.0.js"></script>  <script src="https://fb.me/react-dom-0.14.0.js"></script>  <title>JS Bin</title></head><body>  <div id="root"></div></body></html>

 

[Redux] React Todo List Example (Adding a Todo)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.