我可以通过状态中不存在的道具传递值吗

Can I pass in a value via props which does not exist in state?

本文关键字:可以通过 状态 不存在      更新时间:2023-09-26

在Reactjs中,假设我有一个具有状态的<Parent>组件和一个名为foo的"全局"(或父级的局部)变量。

是否可以像<Child value={foo}>一样将foo作为道具传递,并在foo更新时触发<Child>上的组件更新?请记住,foo只是一个变量,而不是状态,而是从Parent组件中修改的。

在我看来,React只有在看到对this.setState({...});的调用时才会考虑重新渲染,因此<Child>在调用之前永远不会知道道具的更改。

我刚刚在自己的代码中测试了这一点,我尝试使用this.hello并将其设置为"hello",然后在componentDidMount中将其修改为"NOTHELLO"并将变量放入渲染中的div中。在其他地方触发setState之前,变量不会从"HELLO"更改为"NOTHELLO"。因此,react不会更新不处于状态或道具中的变量,因为它不会再次渲染。为什么不把它添加到您的州?如果它的使用级别高于,只需通过props传递它,并通过回调更新它,而不是使用state。

据我所知,如果您可以让Parent在没有setState()的情况下重新发送,那么使用随Parent组件更改而更改的变量foo将与使用state变量一样工作,正如您所提到的。

然而,React可能使用了一种数据签名机制来进行依赖于state的DOM比较检查(确保只有更新的内容才会在实际DOM中发生更改),从而导致无论foo是否发生更改,都会对Child组件进行重新应答。(都在大括号里,因为这只是我的一个小想法)

但是foo听起来正是应该放在state中的变量,为什么不把它放在那里呢?在React文档中,有一个页面解释要在状态中放入什么。我会在几分钟内获取它的链接。


编辑:根据您的评论,要创建一个多个组件接收一些数据的情况,您可以轻松使用Flux架构。

有了React,你可以使用Alt.我发现它既简单又直观-你可以在React组件上创建一个动作并绑定监听器,当你的动作被调用时,这些监听器就会被调用。如果你愿意,你可以使用一个存储,这将是你关于数据的"单一真相来源"。React组件可以监听操作,也可以监听存储中的更改。(您将存储中的方法绑定到您的操作)。

试试这个教程,我发现它非常彻底和简单,也访问Alt文档。