我可以通过状态中不存在的道具传递值吗
Can I pass in a value via props which does not exist in state?
在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文档。
- jquery动画可以通过编程链接吗
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- 为什么没有'无法通过状态更改工作RTCPeerConnection
- 是否可以通过Chrome扩展内容脚本打开Chrome外部协议请求
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 当一些事情可以通过JS或CSS完成时,我应该选择哪种方式
- 响应式图片库,每个图片都可以通过锚链接访问
- window.open:是否可以通过修改DOM来打开一个新窗口
- 可以通过ClassName在多个画布上绘制
- 我可以通过点击html文件中的按钮来记录我的屏幕/网页吗
- 为什么无法根据谷歌地图地理编码geometry.bounds找到位置,但可以通过MongoDB中的geometry.vi
- 有没有什么方法可以通过输入字段(type=file)来找出选择了多少个文件
- 是否可以通过Primefaces 3.3的自定义对话框取消Ajax请求
- 有没有一种正确的方法可以通过jQuery构建HTML
- 我可以通过javascript在鼠标光标旁边动态添加文本吗?
- 我可以通过使用函数绑定来保留默认值吗?如果没有,为什么
- TCP或WebSockets可以通过Android和iOS设备上的Javascript调用
- 是否可以通过 AJAX *按顺序*上传文件
- 我可以通过状态中不存在的道具传递值吗