React:如何从外部函数更新组件状态?

时间:2019-06-20 11:16:47

标签: javascript reactjs

我已经创建了一个通知组件(WIP),当我开始实施它以在“真实”场景中对其进行测试时,我意识到我不完全了解自己在处理状态方面(尤其是在组件本身之外)。

从本质上讲,我需要根据我的应用程序中某些调用的成功/错误设置visible状态。这些调用是在单独的js文件中进行的,其中this.setState({})不能正常工作。

我在这里设置了一个示例:https://codesandbox.io/s/recursing-ives-ktc4w

我简化了代码。在randomjsfile.js中,我有一个超时,该超时在2.5秒后显示控制台日志,并且我希望将组件的visible状态设置为false。我尝试过的方法不起作用,我认为这是有道理的,因为没有将它们真正联系在一起的东西。我只是不确定如何实现这一目标。

任何帮助或指导将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以将状态保留在某些父组件中,并将其作为道具传递给子组件,或者可以使用Context或使用Redux。如我所见,您的randomjsfile.js与React无关,因此,您可以使用Redux并将数据保留在Redux Store中,将组件连接到此存储,并在randomjsfile.js中调度一个操作,该操作将更新商店。

答案 1 :(得分:0)

您不能只是从任何地方调用this.setState({}),而要考虑在这种情况下什么是“ this”。

在randomjsfile.js中,这可能是全局上下文的窗口。您将从反应环境以及其他一些组件中调用这些通知,这些通知将根据组件层次结构设置最顶层父组件的状态。

类似这样的内容:How to update parent's state in React?