你如何在反应中设置一个组件与不同组件的状态?

Posted

技术标签:

【中文标题】你如何在反应中设置一个组件与不同组件的状态?【英文标题】:How do you set the state of one component from a different component in react? 【发布时间】:2016-02-13 01:13:01 【问题描述】:

我有一个组件不会像这样渲染任何东西:

var Application = react.createClass .....

function(....)

module.exports = Application

还有一个像这样的组件:

var Tag = react.createClass....
  getInitialState
  //...
  functions
  //...
  setState( submit: false )
  render: 
  //...

我想从 Application 更改 Tag 中的提交状态。这可能吗?

【问题讨论】:

您必须发布事件并监听这些事件。 facebook.github.io/react/tips/… React JS reference function in another component的可能重复 【参考方案1】:

虽然可以从应用程序更改标签的状态,但您确实不应该这样做。此外,我讨厌这些类型的答案,因为我不应该告诉你 bad vs.好的做法,我应该给你你所寻求的答案。

这就是我的做法。

如果您需要从应用程序中设置标签的状态,您可以做 2 件事之一:

A. 在应用程序上调用 setState,并将特定的道具传递给标签,您将检查是否应该设置状态。您可以在标签的componentWillReceiveProps 中查看这一点。根据收到的道具,您可以设置状态。请注意,componentWillReceiveProps 不会在 componentDidMount 运行时运行,因此您可能需要通过在 componentDidMount 末尾执行类似操作来强制它运行:

componentDidMount: function() 

    //other code...

    if (this.props.forceReceiveProps === true) 
        this.componentWillReceiveProps(this.props);
    

B.实现此目的的另一种方法是使用应用程序中标记的引用。

在应用程序中,您将渲染一些可能有标签的东西。做这样的事情:

<Tags ref=tagsRef />

然后,在应用程序的一些代码中,您可以这样做:

this.refs.tagsRef.setState()

编辑:实际上,在重读时,您似乎没有在 Application.我认为它是您整个应用程序的父级。不知道你为什么不在应用程序中渲染,但可以说你可能想要使用 Flux 之类的东西。

【讨论】:

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

有没有办法在 useEffect 的反应组件中设置 xstate 机器的状态?

如何在子组件中设置状态?

ReactJS中从父组件调用子函数时如何在子组件中设置状态

反应:无法使用 useContext 钩子在 app.js 中设置上下文状态

如何使用类对象在 Reactjs 中设置功能性无状态组件的样式

如何在反应中设置来自axios的响应状态