http://jsfiddle.net/1erw4fba/5/
var App = React.createClass({
getInitialState(){
return {
items:[1,2,3],
isEditing:false
}
},
dlt_item(key){
var newItems = this.state.items.filter((item,i)=> i !== key)
this.setState({items:newItems,isEditing:false})
},
edit_handler(){
this.setState({isEditing:true})
},
isEditing_html(){
return(
<div>
<input type="text" />
<button>Save</button>
</div>
)
},
renderItem(){
return(
this.state.items.map(function(item,i) {
var temp = null;
if(this.state.isEditing){
temp = this.isEditing_html()
}else{
temp = <div onClick={this.edit_handler}><button>Edit</button>
<button onClick={this.dlt_item.bind(this,i)}>Delete</button></div>
}
return (<li key={i}>{item}
{temp}
</li>
)
}.bind(this)
)
)
},
render(){
return(
<ul>
{this.renderItem()}
</ul>
)
}
})
当我点击删除按钮时,为什么会出现编辑输入文字?假设只有当isEditing的状态为真时才会出现。然后我尝试故意将其设置为false,但仍然会出现。这对我来说很不寻常。
答案 0 :(得分:1)
你的问题在这里:
temp = <div onClick={this.edit_handler}><button>Edit</button>
<button onClick={this.dlt_item.bind(this,i)}>Delete</button></div>
您将onClick放在div中,因此当您按下“编辑”按钮或“删除”按钮时,它们都会被调用。只需使用:
temp = <div><button onClick={this.edit_handler}>Edit</button>
<button onClick={this.dlt_item.bind(this,i)}>Delete</button></div>