React-js-todo-list-sortable(1)

Building a Todo app with React.js

這是我首次嘗試用React-JS建立一個待辦事項應用。React-JS是一個JavaScript庫,用於構建用戶界面,主要是因為它是由Facebook的建立。我們將學習如何使用。

讓我們開始.您可以按照從GitHub庫的步驟本教程

  1. ##Demo
  2. ##Download
  3. ##Practice

TodoListApp

在本文中,我們將使用建立一個非常的應用程序Facebook的 react.js. 如果你不熟悉這個庫,那麽我會強烈建議閱讀使用React構建了完整的Comment system教程.

Thinking in components

建設React.js應用的根本出路在於您的應用程序分解成一堆有用的組件,然後你的工作方式向後分別構建它們。一旦各個部件都是準備就緒,可以它們連接起來,以在組件之間交換數據。例如,我們的Todo應用程序可以分解為以下組件和層次結構,

- TODO APP
    - TODO BANNER
    - TODO FORM
    - TODO LIST
        - TODO LIST ITEM #1
        - TODO LIST ITEM #2
        ...
        - TODO LIST ITEM #n

Basic Skeleton

/* [TODO APP] */ 
var TodoApp = React.createClass({ ... }); 
    /* [TODO BANNER] && [TODO LIST] */ 
    var TodoBanner = React.createClass({ ... });
    /* [TODO FORM] */ 
    var TodoForm = React.createClass({ ... });                     
    var TodoList = React.createClass({ ... }); 
        /* [TODO LIST ITEM] */ 
        var TodoListItem = React.createClass({ ... }); 

React.render(<TodoApp/>, document.body);

Component 1 - TodoApp

這個組件將持有將由它的子組件以各種形式來共享待辦事項列表。 items的初始狀態將是一個空白列表。該列表將盡快作為一個新的項目通過TodoForm組件添加更新。

/* [TODO APP] */ 
var TodoApp = React.createClass({ 
    getInitialState: function(){ 
        return {items: []}; 
    }, 
    updateItems: function(newItem){ 
        var allItems = this.state.items.concat([newItem]); 
        this.setState({items: allItems});
    }, 
    render: function(){ 
        return ( 
            <div> 
                <TodoBanner/>
                <TodoForm onFormSubmit={this.updateItems}/>                                 
                <TodoList items={this.state.items}/>     
            </div> 
        ); 
    } 
});

Component 2 - TodoBanner

它只是包含了一個標題標簽。

/* [TODO BANNER] */ 
var TodoBanner = React.createClass({ 
    render: function(){ 
        return ( 
        <h3>TODO....react.js</h3> 
        ); 
    } 
});

Component 3 - TodoList

它接受的項目的列表和環繞一個TodoListItem組件的每個項目。最終的結果,然後以<ul>標簽包裹。

/* [TODO LIST] */ 
var TodoList = React.createClass({ 
    render: function() { 
    var createItem = function(itemText) { 
        return ( 
            <TodoListItem>{itemText}</TodoListItem> 
            );
        }; 
        return <ul>{this.props.items.map(createItem)}</ul>;
    } 
});

Component 4 - TodoListItem

它以<li>標簽列出所有項目 ,以便它呈現為在最終的HTML的列表的塊。 this.props.children預見包含傳遞給TodoListItem標簽從其父組件的所有後代。

/* [TODO LISTITEM] */
var TodoListItem = React.createClass({
    render: function(){
        return (
            <li data-id={this.props.value} key={this.props.value}>{this.props.children}</li>
        );
    }
});

Component 5 - TodoForm

它包含一個文本字段後跟一個按鈕,觸發在待辦事項列表中的另外的項目。此組件將保持當前的項目在文本框輸入並且兩者都使用onChange事件保持同步。由於作為提交按鈕被按下很快,該項目被傳遞給其父組件,焦點返回到文本框。

/* [TODO FORM] */
var TodoForm = React.createClass({
    getInitialState: function() {
        return {item: ''};
    },
    handleSubmit: function(e){
        e.preventDefault();
        this.props.onFormSubmit(this.state.item);
        this.setState({item: ''});
        ReactDOM.findDOMNode(this.refs.item).focus();
        return;
    },
    onChange: function(e){
        this.setState({
            item: e.target.value
        });
    },
    render: function(){
        return (
            <div className="row">
              <form  onSubmit={this.handleSubmit}>
                <div className="form-group col-sm-10">
                    <input type='text' className="todoField form-control"  ref='item' onChange={this.onChange} value={this.state.item}/>
                    <input type='submit' className="btn btn-default" style={{"float":"left","marginLeft":"5px"}} value='Add'/>
                </div>
              </form>
            </div>
        );
    }
});

Render - TodoApp

最後一步是繪制 TodoApp

ReactDOM.render(
        <TodoApp/>,
        document.getElementById('todo')
      );

當你完成,你可以看到 TodoApp.
TodoListApp
The complete working demo can be found here .

##Building a Todo app with React.js (1) - A simple todos list

##Building a Todo app with React.js (2) - Improve Component & Remove Component

##Building a Todo app with React.js (3) - Adding Filters for Search and showing complete/incompleted tasks

##Building a Todo app with React.js (4) - Multiple Todos

##Building a Todo app with React.js (5) - Sort item