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

Posted

技术标签:

【中文标题】如何在 React 中从另一个组件设置一个组件的状态【英文标题】:How to set one component's state from another component in React 【发布时间】:2020-10-03 12:44:09 【问题描述】:

假设我有以下名为 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() 作为您的父类中的道具传递,就像这样......

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

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

this.props.setParentState(newParentStateObject);

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

<PostForm
    postform=this
/>

稍后,您可以使用this.props.postform.anyFunctionEver() 调用任何邮件。

从父级设置子级状态:

假设您现在想做相反的事情:从父组件更新子组件的状态?一样简单,在定义&lt;PostForm/&gt;时设置引用...

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

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

this.postform.setState(newChildStateObject);

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

【讨论】:

以上是关于如何在 React 中从另一个组件设置一个组件的状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件

在 vue 3 中从另一个本地项目导入和显示组件

如何从另一个 React / ReactNative 组件触发 GraphQL 查询

React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?

如何从另一个组件 React 更改反应上下文的值

如何使用 React 和 Redux 从另一个组件访问 ref?