Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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 Redux深度嵌套对象_Javascript_Reactjs_Object_Redux - Fatal编程技术网

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.0one.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中的道具,这与此场景不同。国家不应该有任何关系,还是我错了?我错了。我很久以前就写过这个存储了,我忘了除了组件状态之外,它还有自己的默认状态。我真是太傻了。谢谢你的帮助。