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