当前位置: 首页 > 知识库问答 >
问题:

在对象嵌套的3层深度中设置集

韩嘉胜
2023-03-14

嗨,伙计们,我有一个问题,从一开始,我会提到我已经尝试过这个和这个

我的情况如下。我有API,它发送给我

根目录处于组件状态!

Root: {
  RootVal1: {
    Prop1: '',
    Prop2: '',
    Prop3: '',
  }
  RootVal2: [
    PropObj1: {
      NestedProp1: '',
      NestesPropObj: {
        NestedEvenMoreProp1: '',
        NestedEvenMoreProp2: '',
        NestedEvenMoreProp3: ''
      }
    },
    PropObj2: {
      NestedProp1: '',
      NestesPropObj: {
        NestedEvenMoreProp1: '',
        NestedEvenMoreProp2: '',
        NestedEvenMoreProp3: ''
      }
    },
    PropObj3: {
      NestedProp1: '',
      NestesPropObj: {
        NestedEvenMoreProp1: '',
        NestedEvenMoreProp2: '',
        NestedEvenMoreProp3: ''
      }
    },
  ]
}

我如何更新Prop1Prop2Prop3NestedEvenMoreProp1NestedEvenMoreProp2NestedEvenMoreProp3setState?最后一个约束是我不能更改root的名称(我不能将其重命名为newRoot等)

我尝试的是调用这个函数:

  /**
   * @summary update state using immutable object
   * @param {Object} name of key and value for update
   * @returns {string} Promise that returns
   */
  updateStateHelper = target => new Promise((resolve) => {
    const updatedState =
      update(this.state[target.name], { $merge: { [target.name]: target.value } });
    this.setState(prevState => ({
      ...prevState,
      updatedState,
    }), () => resolve(this.state[target.name]));
  });

因此:

// data[0] and data[1] is just copy of RootVal2 and RootVal1, with changed values. 
data[0]
data[1]

const root = Object.assign({}, this.state.root);
root.RootVal2 = [...data[0].RootVal2];
root.RootVal1 =  {...data[1]};
//Here root displays edited 
console.log(root);

this.updateStateHelper({name: 'root', value: root,})
  .then(() => {
    //Here root displays without the edit
    console.log(this.state.root);
    resolve('Success');
  });

共有1个答案

庞鸿骞
2023-03-14

您可以使用Spead运算符。

示例(更新Prop1Prop2Prop3):

this.setState({
  Root:
    ...this.state.Root, 
    RootVal1: {
      ...this.state.Root.RootVal1,
      Prop1: "Prop1 value here",
      Prop2: "Prop2 value here",
      Prop3: "Prop3 value here"
    }
  }
);

更多信息在这里(感谢@TelmosDias)

 类似资料:
  • 我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。

  • 我想知道是否有一种方法可以使用useState()更新React中的嵌套对象状态

  • 我试图通过一个reducer在我的react.js/redux应用程序中设置一个深度嵌套的对象,但是对象更改并没有传播到我的组件中。我应该如何更新和mapStateToProps这样的对象? 我已经尝试了…在我的reducer中添加我的操作的有效负载,在mapStateToProps中映射一个更高级别的对象,并将我映射到组件道具的对象扁平化。 我的初始状态: 结果是我的组件没有显示Redux的状态

  • 问题内容: 一个作业有一个真正的问题(和头痛)… 我在入门编程班上,我必须写一个函数,给定一个列表,该函数将返回其达到的“最大”深度。例如:[1,2,3]将返回1,[ 1,[2,3]]将返回2 … 我已经编写了这段代码(这是我能得到的最好的T_T) 但是,它显然不像应有的那样工作,因为如果存在不计入最大深度的列表,它仍然会增加计数器… 例如:当我将函数与[1,2,[3,4],5,[6],7]一起使

  • 问题内容: 我有一个对象,它可以是任何数量的深度,并且可以具有任何现有属性。例如: 在此我想设置(或覆盖)属性,如下所示: 属性字符串可以具有任何深度,并且值可以是任何类型/事物。 如果属性键已经存在,则不需要合并对象和数组作为值。 前面的示例将产生以下对象: 如何实现这种功能? 问题答案: 此函数使用您指定的参数应添加/更新容器中的数据。请注意,您需要跟踪架构中的哪些元素是容器,哪些是值(字符串

  • 对于我正在使用的插件,我必须具有如下状态: 如何在不设置其余访问权限的情况下设置hospital_id状态? 这似乎删除了一切,但hospital_id: