У меня есть приложение с 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 компонент им рендеринга нескольких элементов 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>
)
},
});
Когда я нажимаю на 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), чтобы описать, как обрабатывать связь, составлять компоненты, чтобы решить вашу проблему по-другому (как вы хотели или хотели) –