Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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中使用不变性助手设置变量对象键_Javascript_Json_Reactjs_Immutability - Fatal编程技术网

Javascript 在React中使用不变性助手设置变量对象键

Javascript 在React中使用不变性助手设置变量对象键,javascript,json,reactjs,immutability,Javascript,Json,Reactjs,Immutability,我有一个函数,我想写在React中。在我的类中,有一个state对象fields,如下所示: this.state = { step: 1, fields: { type: '', name: '', subtype: '', team: '', agreement: '' } }; assignAttribute(field, attribute) { var temp = update(this.state.fields, {

我有一个函数,我想写在React中。在我的类中,有一个state对象
fields
,如下所示:

this.state = {
  step: 1,
  fields: {
    type: '',
    name: '',
    subtype: '',
    team: '',
    agreement: ''
  }
};
assignAttribute(field, attribute) {
  var temp = update(this.state.fields, {
    field: {$set: attribute}
  });

  this.setState({
    fields: temp
  });
}
我使用
immutability helper
分配这些键的各种函数通常如下所示:

assignType(attribute) {
  var temp = update(this.state.fields, {
    type: {$set: attribute}
  });

  this.setState({
    fields: temp
  });
}
我想做的是使用一个更通用的函数并执行以下操作:

this.state = {
  step: 1,
  fields: {
    type: '',
    name: '',
    subtype: '',
    team: '',
    agreement: ''
  }
};
assignAttribute(field, attribute) {
  var temp = update(this.state.fields, {
    field: {$set: attribute}
  });

  this.setState({
    fields: temp
  });
}

但是,这不起作用。使用
不变性助手
使用变量键我能做什么?

解决了它!我需要使用并简单地编辑
assignAttribute

assignAttribute(field, attribute) {
  var temp = update(this.state.fields, {
    [field]: {$set: attribute}
  });

  this.setState({
    fields: temp
  });
}

如果有动态字段名,则可以使用
[]
语法:

var data = {}
data[field] = {$set: attribute}

var temp = update(this.state.fields, data)

这真是太好了。

真是个好发现。不知道此ES6功能。关于更笨拙的“老办法”,请参见另一个答案。