从子组件在父级上执行setState的建议模式是什么 .
var Todos = React.createClass({
getInitialState: function() {
return {
todos: [
"I am done",
"I am not done"
]
}
},
render: function() {
var todos = this.state.todos.map(function(todo) {
return <div>{todo}</div>;
});
return <div>
<h3>Todo(s)</h3>
{todos}
<TodoForm />
</div>;
}
});
var TodoForm = React.createClass({
getInitialState: function() {
return {
todoInput: ""
}
},
handleOnChange: function(e) {
e.preventDefault();
this.setState({todoInput: e.target.value});
},
handleClick: function(e) {
e.preventDefault();
//add the new todo item
},
render: function() {
return <div>
<input type="text" value={this.state.todoInput} onChange={this.handleOnChange} />
<button onClick={this.handleClick}>Add Todo</button>
</div>;
}
});
React.render(<Todos />, document.body)
我有一个todo项目数组,这些项目在父级's state. I want to access the parent'状态下维护,并从 TodoForm
的 handleClick
组件中添加一个新的待办事项 . 我的想法是在父级上执行一个setState,它将呈现新添加的待办事项 .
5 回答
在您的父级中,您可以创建一个类似
addTodoItem
的函数,它将执行所需的setState,然后将该函数作为props传递给子组件 .您可以在TodoForm的handleClick中调用
addTodoItem
. 这将在父级上执行一个setState,它将呈现新添加的待办事项 . 希望你明白这个主意 .Fiddle here.
您可以在父组件中创建addTodo函数,将其绑定到该上下文,将其传递给子组件并从那里调用它 .
然后,在Todos.render中,你会这样做
用TodoForm调用它
这些都是基本正确的,我只是想我会指出新的(ish)官方反应文件基本上建议: -
见https://reactjs.org/docs/lifting-state-up.html . 该页面也通过一个例子 .
我发现以下工作和简单的解决方案将参数从子组件传递到父组件:
Look at JSFIDDLE