Javascript dynamic setState可在react中添加新的动态属性

Javascript dynamic setState可在react中添加新的动态属性,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,在这个场景中,我必须向对象数组添加多个动态属性。说它是lang=['en','fr','more'],我如何生成这样的对象结构 以下是我失败的尝试: class App extends React.Component { state = { lang: ["en", "fr"], items: [ { id: 1, value: { en: "abc", fr: "hello"

在这个场景中,我必须向对象数组添加多个动态属性。说它是
lang=['en','fr','more']
,我如何生成这样的对象结构

以下是我失败的尝试:

class App extends React.Component {
  state = {
    lang: ["en", "fr"],
    items: [
      {
        id: 1,
        value: {
          en: "abc",
          fr: "hello"
        }
      }
    ]
  };
  onChange = (e, i) => {
    this.setState({
      items: this.state.items.map(o => ({
        ...o,
        value: {
          [this.state.lang[i]]: e.target.value //need fix
        }
      }))
    });
  };
  render() {
    return (
      <div className="App">
        {this.state.lang.map((o, index) => (
          <div>
            <input
              onChange={e => this.onChange(e, index)}
              placeholder={o}
              type="text"
            />
            <br />
          </div>
        ))}
        <br />
        <pre>{JSON.stringify(this.state, null, 2)}</pre>
      </div>
    );
  }
}
类应用程序扩展了React.Component{
状态={
lang:[“en”,“fr”],
项目:[
{
id:1,
价值:{
英语:“abc”,
神父:“你好”
}
}
]
};
onChange=(e,i)=>{
这是我的国家({
items:this.state.items.map(o=>({
……哦,
价值:{
[this.state.lang[i]]:e.target.value//需要修复
}
}))
});
};
render(){
返回(
{this.state.lang.map((o,index)=>(
this.onChange(e,index)}
占位符={o}
type=“text”
/>

onChange = (e, i) => {
    this.setState({
      items: this.state.items.map(o => ({
        ...o,
        value: {
          ...o.value,  // <- this
          [this.state.lang[i]]: e.target.value
        }
      }))
    });
  };
))}
onChange = (e, i) => {
    this.setState({
      items: this.state.items.map(o => ({
        ...o,
        value: {
          ...o.value,  // <- this
          [this.state.lang[i]]: e.target.value
        }
      }))
    });
  };
{JSON.stringify(this.state,null,2)} ); } }

如果我理解了您要正确执行的操作,您只需要在地图中散布
对象:

onChange=(e,i)=>{
这是我的国家({
items:this.state.items.map(o=>({
……哦,
价值:{

…o.value,//您可能需要再详细说明一下。您是否试图在
项中添加新条目
?这种方法很有效,但并不完美,因为如果我允许用户更改语言会怎么样?它将保留不匹配的值,让我做一个演示来解决这个问题。我对这种方法有点怀疑。您可以没有
lang
数组,如果需要访问所有语言,可以使用
Object.keys(items.value)
。我将在稍后编写一个代码笔。哦,没关系,
是一个数组。让我找到更好的。假设您有多个
。是否希望所有项中的值都受输入的影响?这是当前的行为。