我有一個包含3個組件的應用程序。 第一個是App.jsx 如下它調用TodoList的組分:reactjs從父母編輯孩子狀態
<TodoList items={this.state.items} loaded={this.state.loaded} />
的TodoList的組件呈現多個TodoListItem部件
module.exports = React.createClass({
render: function(){
return (
<ul>
{this.renderList()}
</ul>
)
},
renderList: function(){
var children = [];
for(var key in this.props.items) {
if(this.props.items[key].text){
var listItem = this.props.items[key];
listItem.key = key;
children.push(
<TodoListItem item={listItem} key={key} onEdit={this.handleItemEdit} />
)
}
}
return children;
},
handleItemEdit: function(component){
console.log(component);
}
});
在我TodolistItem部件IM
然後渲染多個li元素
module.exports = React.createClass({
getInitialState: function(){
return {
text: this.props.item.text,
done: this.props.item.done
}
},
render: function(){
return (
<li onClick="this.props.onEdit.bind(null,this)">{this.state.text}</li>
)
},
});
當我點擊李在父元素函數上的函數handlItemEdit被激發,我的問題是我可以如何改變其父母的handleItemEdit函數中的子元素的文本值? 什麼即時試圖做的是,當你點擊一個李開一個引導模式與輸入字段中,更改其文本,保存和通過新的道具TodoListItem
非常感謝您的回答!因爲todoList中的道具來自我添加的http請求 componentWillReceiveProps:function(){ this.setState({items:this.props.items}); } 現在在handleItemEdit我怎麼只能編輯點擊li的值? 我可以通過它的關鍵嗎? –
'handleItemEdit'實際上應該在TodolistItem組件中,而不是在TodoList組件中......這會解決你的問題 –
你也可以閱讀這篇[文章](https://facebook.github.io/react/tips/communicate-between- components.html),來介紹如何處理通信的beetwen組件,以另一種方式解決您的問題(如您想要的那樣) –