javascript - React.js 并更新 JSON 数组状态

标签 javascript reactjs

var DENEMEJSON = React.createClass({
getInitialState: function() { return {
    arrayone:[{"id":"1","city":"New York"},{"id":"2","city":"Brooklyn"}],
    arraytwo:[{"id":"101","city":"Hamburg"},{"id":"102","city":"Schalke"}]

}


},
buttonFunc(){
    var str=this.state.arrayone;
    str[0].city="Tokyo";

    this.setState({arrayone:str});
    this.setState({arraytwo:str});
},
buttonFunc2(){
var str=this.state.arrayone;
    str[0].city="Pakistan";
    console.log(JSON.stringify(this.state.arrayone));
    console.log(JSON.stringify(this.state.arraytwo));
    this.setState({arrayone:str});
},

 render: function () {
      return (      <div>
        <button onClick={this.buttonFunc}/>
        <button onClick={this.buttonFunc2}/>
        {JSON.stringify(this.state.arrayone)}
        {JSON.stringify(this.state.arraytwo)}</div>
             )
  }//end return

});

当我单击第一个按钮时,代码会执行我想要的操作。它将 arrayone[0].cityarraytwo[0].city 值设置为东京,就像这样。

arrayone : [{"id":"1","city":"东京"},{"id":"2","city":"布鲁克林"}]

arraytwo : [{"id":"1","city":"东京"},{"id":"2","city":"布鲁克林"}]

当我单击第二个按钮时,我只想将 arrayone[0].city 值设置为 Pakistan。(而不是 arraytwo) .

但是代码将 arrayone[0].cityarraytwo[0] 值设置为 Pakistan

为什么它将 arraytwo[0].value 设置为 Pakistan

我该如何解决这个问题?

最佳答案

您的 str 是对 this.state.arrayone 的引用,并且您正在使用 str 设置 arraytwo

因此,当 arrayone 更改时,arraytwo 也会更改。 直接使用 this.state.arrayone 设置 str 不是一个好主意。 相反,您应该克隆状态,以便能够更改您想要更改的内容,并仅在 setState 中更新您的状态。

var cloneArrayone = JSON.parse(JSON.stringify(this.state)).arrayone;
cloneArrayone[0].city = "Tokyo";

this.setState({
  arrayone: cloneArrayone,
  arraytwo: cloneArrayone
});

这是一个有效的示例:https://jsfiddle.net/snahedis/69z2wepo/28552/

关于javascript - React.js 并更新 JSON 数组状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34955715/

相关文章:

javascript - 制作和使用 NodeJS 的 soap 客户端同步

javascript - 将值从 JavaScript 传递到 C# 后,如何使用它进行一些自动操作?

javascript - 如何创建动态下拉列表?

javascript - 在 React 应用程序中渲染 DIV

reactjs - Apollo 的 proxy.writeQueries 清空缓存(是否有错误?)

javascript - 函数属性的真正含义是什么

javascript - 我的网站仅在登录层上有 https。可以为我的网站实现服务 worker 来实现 chrome 通知吗

reactjs - Jest 测试在 tsx 语法上失败

javascript - 当组件可以随时卸载时,如何使用 React 管理 useEffect 中的竞争条件风险?

reactjs - Formik + 是的不显示错误