如何在 React 中从另一个组件设置一个组件的状态

IT技术 reactjs
2021-03-23 00:42:16

假设我有以下名为 Home 的组件:

this.state = {
    posts: []
}
componentDidMount() {
    ... data is fetched from api
}

<div
    <PostForm />
    {this.state.posts.map(post => (
     <Post key={post.id} post={post} />
    ))}
</div>

在 PostForm 组件与新的 Post 一起提交后,我将如何更新 Home 的状态,或从 api 重新获取数据。

1个回答

欢迎来到 SO!

从孩子设置父状态:

如果您希望子组件可以访问父组件的状态,只需setState()在父类中作为props传递,就像这样......

<PostForm
    setParentState={(state) => this.setState(state)}
/>

然后,稍后PostForm.js,只需像这样设置父状态....

this.props.setParentState(newParentStateObject);

或者,你甚至可以做......

<PostForm
    postform={this}
/>

稍后,您可以使用this.props.postform.anyFunctionEver().

从父级设置子状态:

假设您现在想做相反的事情:从父组件更新子组件的状态?这同样简单,在定义时设置一个参考<PostForm/>......

<PostForm
    ref={(instance) => {this.postform = instance}}
/>

然后你可以直接在你的父类中设置 postform 的状态......

this.postform.setState(newChildStateObject);

状态可能会发生很多事情,因此如果您不确定,请尝试创建一个testFunc() {console.log('test');},然后尝试在父级和子级之间传递/激活它。