在 React setState 中使用子键的计算值

IT技术 javascript json reactjs
2021-05-03 02:35:09

我希望能够在 React 中更新状态时使用子键的计算值

我了解如何在这样的简单设置中使用计算值:

this.setState({ [name]: value });

但是我无法让键值计算在这样的情况下工作:

constructor(props) {
    super(props);
    this.state = {
        foo: { a: 1, b: 2 }
    }; 
}

const keyToChange = 'a';
const value = 3;

this.setState({ foo[keyToChange]: value });

我怎样才能做一些像

this.setState({ foo.a: value });

但是,这里a可以是一个计算的值

我尝试了以下方法,但似乎不起作用:

const subKeyName = 'a';

// Doesn't work
const nameOfKey = 'foo.' + subKeyName;
this.setState({ [`${nameOfKey}`]: value });

// Doesn't work
this.setState({ foo[subKeyName]: value });
1个回答

如果要覆盖 foo 中的旧属性:

this.setState({ 
  foo: {
    [keyToChange]: value 
  }
});

如果您想保留 foo 中的旧属性,但只需在其中添加(或替换)一个键:

this.setState(oldState => {
  return {
    foo: {
      ...oldState.foo,
      [keyToChange]: value
    }
  }
});

最后一个例子是使用对象传播语法,它还不是 javascript 的标准化部分(目前是第 4 阶段的提案,所以它很快就会成为语言的一部分)。所以如果你现在想使用它,你应该使用这个 babel 插件如果您没有该插件,则标准 javascript 的等效项是:

this.setState(oldState => {
  return {
    foo: Object.assign({}, oldState.foo, {[keyToChange]: value})
  }
});