2014-05-18 33 views
1

在下面的代码中,当我改变输入文本时,它会错误地更新输入的值,但是当我按回车键后,数据更新在两个ul标签中。任何想法我做错了什么?如何更新反应中类的错误状态?

<script type="text/jsx"> 
/** @jsx React.DOM */ 
var todoList = React.createClass({ 
    render : function(){ 
     var createItem = function(itemText , idx){ 
     return <li key={idx+itemText} >{itemText}</li> 
     }; 
     return <ul>{this.props.itemlist.map(createItem)}</ul> 
    } 
}); 

var todoApp = React.createClass({ 
    getInitialState: function() { 
     return {items: [], text: ''}; 
    }, 
    handleChange:function(name ,e){ 
    this.state.text = e.target.value; 
    this.setState({ name : e.target.value }); 
    }, 
    handleKeyDown : function(e , idx){ 
    if(e.keyCode == 13){ 
     var nextItems = this.state.items.concat([this.state.text]); 
     this.setState({ items : nextItems , text : '' }); 
    } 
    }, 
    render :function(){ 
    var results = this.props.items; 
    return (
     <div> 
     {results.map(function(idx ,item){    
      this.state.items[idx] = item; 
      return (
      <div key={'outer'+idx}> 
       <todoList itemlist={this.state.items} /> 
       <input key={idx} onChange={this.handleChange.bind(this, item)} onKeyDown={this.handleKeyDown} onSubmit={this.handleSubmit} /> 
      </div> 
     );     
     } , this)} 
     </div> 
    ); 
    } 
}); 

React.renderComponent(<todoApp items={['item1','item2']} />, document.getElementById('example')); 
</script> 

回答

0

你有'name'作为键,但它应该是'text'。

handleChange:function(name ,e){ 
    this.state.text = e.target.value; 
    this.setState({ text : e.target.value }); 
    }, 

你还需要将值传递给输入:

<input key={idx} onChange={this.handleChange.bind(this, item)} 
     onKeyDown={this.handleKeyDown} onSubmit={this.handleSubmit} 
     value={this.state.text} /> 
+0

感谢的答案,但在一个职位,然后按回车,然后输入评论时的添加到这是不对的和我的想法,前Facebook的列表的评论下面的帖子。 – user3650568

+0

请帮我@FakeRainBrigand – user3650568

+1

我不明白你想要它做什么。 – FakeRainBrigand