我会在这里提出不同的组件架构。你看,你ListTable是一个子Type组件,尽管这不是最好的方法。
创建一个新组件,它将成为两者的父组件,例如
class ParentComponent extends Component {
constructor(props) {
super(props);
this.state = { todos: [] };
this.addTodo = this.addTodo.bind(this);
}
addTodo(todo) {
this.setState({ todos: [...this.state.todos, todo] })
}
...
render() {
return (
<div>
<ListTable todos={this.state.todos} /> //passing todos
<Type addTodo={this.addTodo} /> //passing a addTodo function
</div>
);
}
}
您可以向Type组件传递一个函数来更新ParentComponent的状态,并将该状态传递给ListTable组件以呈现您的待办事项。
并且Type组件的onSubmit函数应该只更新其父组件的状态,不应返回任何内容。
onSubmit() {
this.props.addTodo(this.state);
}
更新: 从添加按钮中
删除onClick处理程序Task并将 onSubmit 处理程序添加到表单中:
<form onSubmit={this.handleFormSubmit.bind(this)}>
并像这样声明这个处理程序:
handleFormSubmit(e) {
e.preventDefault();
this.props.addTodo(this.state);
}
你的ListTable's table函数也应该循环props.todos而不是状态。