React native 使用动态键更新状态的嵌套值

React native 使用动态键更新状态的嵌套值,react-native,setstate,React Native,Setstate,我想使用动态键更改状态的等级对象。下面是我的代码 state = { id1: { name: 'XYZ', grade: { science: 'A', maths: 'C', }, }, id2: { name: '

我想使用动态键更改状态的等级对象。下面是我的代码

state = {
            id1: {
                name: 'XYZ',
                grade: {
                    science: 'A',
                    maths: 'C',
                },
            },
            id2: {
                name: 'ABC',
                grade: {
                    science: 'A+',
                    maths: 'A+',
                },
            },
}
我尝试了几件事,但都没有找到成功的结果

updateGrade(gradeObj, dyamicKey) { // dyamicKey will be id1, id2
    this.setState({
        [dyamicKey]: {
            ... dyamicKey.grade,
            grade: gradeObj,
        },
    });
}

updateGrade(gradeObj, dyamicKey) { // dyamicKey will be id1, id2
    this.setState({
        [dyamicKey[grade]]: gradeObj,
    });
}

供参考:本主题已被广泛讨论,甚至建议不要使用嵌套状态

作为对第一个答案和后续答案的额外注释,如果您的状态中有两个或多个嵌套值,并且希望更新单个嵌套值,则可以执行以下操作:

this.setState(prevState => ({
  [dynamicKey]: {
  ...prevState[dynamicKey],
  grade: { 
    ...prevState[dynamicKey].grade,
    science: "Z"
  },
}));
或者,如果动态键与特定属性相关:

this.setState(prevState => ({
  id1: {
  ...prevState.id1,
  grade: { 
    ...prevState.id1.grade,
    [dynamicKey]: "Z"
  },
}));

可以使用一个或多个动态键,并且可以对每个嵌套级别使用spread运算符(尽管使用这种方法代码将开始看起来很难看/脏)。

仅供参考:本主题已被广泛讨论,甚至建议不要使用嵌套状态,根据此

作为对第一个答案和后续答案的额外注释,如果您的状态中有两个或多个嵌套值,并且希望更新单个嵌套值,则可以执行以下操作:

this.setState(prevState => ({
  [dynamicKey]: {
  ...prevState[dynamicKey],
  grade: { 
    ...prevState[dynamicKey].grade,
    science: "Z"
  },
}));
或者,如果动态键与特定属性相关:

this.setState(prevState => ({
  id1: {
  ...prevState.id1,
  grade: { 
    ...prevState.id1.grade,
    [dynamicKey]: "Z"
  },
}));
可以使用一个或多个动态键,并且可以对每个嵌套级别使用spread操作符(尽管使用这种方法代码将开始看起来很难看/脏)