Javascript React Redux深度嵌套对象
假设我有一个相当简单的嵌套、获取对象 它包含许多信息,模式是固定的 有些项目是嵌套的,例如:Javascript React Redux深度嵌套对象,javascript,reactjs,object,redux,Javascript,Reactjs,Object,Redux,假设我有一个相当简单的嵌套、获取对象 它包含许多信息,模式是固定的 有些项目是嵌套的,例如: obj:{ one:{ x: "A", y: "B", more:{ z: [1, 2], 0: "C", extra: { a1: "b1", a2: "b2" } } } } 就这么深了 Redux可以很好地存储此信息 为什么我不能在react中检索one.more.0或one.
obj:{
one:{
x: "A",
y: "B",
more:{
z: [1, 2],
0: "C",
extra: {
a1: "b1",
a2: "b2"
}
}
}
}
就这么深了
Redux可以很好地存储此信息
为什么我不能在react中检索one.more.0或one.more.extra.a1
我可以得到一个.x
我可以使用一个.more设置状态,然后检索.0,但不能检索.extra.a1
我理解这是有原因的,但在这个简单的用例存在的地方,我发现它需要hoops使用信息,而这些信息在其他情况下是可以访问和可用的,这让我感到不安
有什么建议可以绕过这一点,而不需要对数据进行标准化/重新设计以适应数据包
理想世界:这个。道具。减少。一个。更多。额外。a1
非常感谢
编辑*
这是可能的,还是必须在渲染前将这些嵌套值组合在一起:
render(){
return(
<div>
{this.props.aReducer.one.more.extra.a1}<br />
</div>
)
}
render(){
返回(
{this.props.aReducer.one.more.extra.a1}
)
}
问题不在于深度嵌套的对象,而更可能在于您的默认状态或缺少验证。为了渲染one.more.extra.a1
路径的每个部分都必须存在,即one
必须是more
作为对象的对象,而extra
作为对象(extra
不必有a1
属性才能正确渲染,因为它只会返回未定义的,而不会抛出错误)。尝试获取未定义的属性将始终引发错误。这通常意味着状态没有正确初始化,或者您没有检查以确保路径的每个部分都存在
检查路径每个部分的一种方法:
var a1 = 'Some default value';
if (one && one.more && one.more.extra) {
a1 = one.more.extra.a1;
}
另一种选择是使用lodash的
\uGet
之类的工具来检查您的身份。文档中说了什么?对不起,我不完全清楚您的意思。React-wise,据我所知,React不会处理深度嵌套的对象。你的意思是它说它不会,并且没有给出任何理由?只要你适当地编码你的还原器和状态映射器,Redux应该能够处理嵌套状态。您的组件获得了哪些数据?数据是否正确存储在Redux存储中?我可以验证Redux是否可以使用它。组件适当地接收所有内容,但是当涉及到渲染(我应该指定)时,我会在低于两个级别的任何道具或状态上得到未定义的错误。A.b有效,但A.C.b=“无法找到未定义的b”,尽管我可以设置状态x:A.C和x.b为真。我已经有过很多次这样的经历,并且总是放弃将数据展平以在渲染中使用它。是的,所以如果我在初始状态下定义整个结构,它不应该抛出错误,但我使用状态作为示例。我只想渲染redux中的道具,这与此场景不同。国家不应该有任何关系,还是我错了?我错了。我很久以前就写过这个存储了,我忘了除了组件状态之外,它还有自己的默认状态。我真是太傻了。谢谢你的帮助。