Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React本机子组件未接收更新的道具_Javascript_React Native - Fatal编程技术网

Javascript React本机子组件未接收更新的道具

Javascript React本机子组件未接收更新的道具,javascript,react-native,Javascript,React Native,我正在尝试创建一个具有3个级别的分层菜单选择组件 结构如下: 类别V0 -->类别V1 ---->类别V2 单击CategoryLv0节点并完成CategoryLv1节点的初始渲染后,一切正常。我遇到的问题是,当我点击CategoryLv1节点时,它应该从组件链的父组件发送一个更新的道具,以触发componentWillReceiveProps级别的CategoryLv1。这将setState并呈现来自该节点的CategoryLv2分支。但是,由于某种原因,类别v1的组件将接收hook。第一级(

我正在尝试创建一个具有3个级别的分层菜单选择组件

结构如下:

类别V0
-->类别V1
---->类别V2

单击
CategoryLv0
节点并完成
CategoryLv1
节点的初始渲染后,一切正常。我遇到的问题是,当我点击
CategoryLv1
节点时,它应该从组件链的父组件发送一个更新的道具,以触发
componentWillReceiveProps
级别的
CategoryLv1
。这将
setState
并呈现来自该节点的
CategoryLv2
分支。但是,由于某种原因,
类别v1
组件将接收hook。第一级(
CategoryLv0
)按预期工作,并接收更新的道具,允许我在其
组件中
设置状态
,将接收道具
,以触发重播。看起来后续的级别应该和lv0一样工作,但事实并非如此

我已经准备了一份世博会小吃,这样你就可以看到它的实际效果了

编辑 snack已更新,以删除子组件中的冗余状态,componentWillReceiveProps并将extraData={this.props}添加到平面列表中



特拉维斯给我指出了正确的方向。
答案是我需要在子组件的
平面列表中使用
extraData
属性。没有它,它就不知道重新播放


因此,由于我将菜单的主状态作为一个道具传递给子组件,因此我将
extraData={this.props}
设置为访问该状态。而且它有效

看着代码,我觉得如果简化一些事情,跟踪/理解可能会更容易。首先,您似乎在复制道具,以在所有类别类中声明。为什么不直接访问道具呢?将值置于状态是不必要的。此外,一旦您消除了冗余状态问题,您就可以将所有类别*变成纯组件。然后检查主状态是否正确更新。另外,查看
FlatList
extraData
道具。嘿,谢谢你的帮助!是的,我以前并没有做过分类类中所有的setState,这是同一个问题。此外,类别类已经是PureComponents。但是是的,我已经删除了多余的setState并更新了零食。根据父组件渲染的console.log,我可以看到状态设置正确,只是传播不正确。请看一看!我现在就读入额外的数据。
extraData
就是这样!非常感谢。在
CategoryLv0
中,我只需要在
FlatList
中设置
extraData={this.props}
,我将再次更新零食,以便人们可以看到