【问题标题】:How to update state of 2D array with N objects inside in React?如何在 React 中使用 N 个对象更新二维数组的状态?
【发布时间】:2020-04-27 22:42:03
【问题描述】:

在我进入主题之前,我想提一下,我已经提到过类似的问题,但我自己无法找到解决方案。

Updating React state as a 2d array?

假设这是我的状态对象

state = {
    graphData: [
        [{x: 0, y: 0}],
    ],
};

随着时间的增加,graphData 会变得更大,可能看起来像这样

    graphData: [
        [{x: 0, y: 0}, {x: 1, y:1}, {x:2, y:2}],
    ],

目前,我以这种方式处理:

  nextGraphData = this.state.graphData[0][graphDataLength] = {x: lastXAxisValue + 1, y: value};

    this.setState({
        graphData: {
            ...this.state.graphData,
            nextGraphData
        }
    });

显然,我收到一条错误消息,提示我不应该直接改变状态。那么,如何在没有直接突变的情况下达到相同的效果。我试着玩了一下,但无法弄清楚。

【问题讨论】:

    标签: javascript arrays reactjs react-vis


    【解决方案1】:

    试试这个

    state = {
        graphData: [
            [{x: 0, y: 0}],
        ],
    };
    

    这样使用

    this.setState({
      ...this.state,
      graphData: [...this.state.graphData, {x:1,y:1}]
    })
    

    【讨论】:

      【解决方案2】:

      因为这一行而出现错误

      nextGraphData = this.state.graphData[0][graphDataLength] = {x: lastXAxisValue + 1, y: value};
      

      当您尝试将值直接分配给 state.graphData

      你要做的就是像这样改变它:

      让 nextGraphData = {...this.state.graphData,{x: lastXAxisValue + 1, y: value}};

      this.setState({
          graphData: {
              ...nextGraphData
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2019-11-30
        • 2018-10-14
        • 2019-09-23
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 2021-12-14
        相关资源
        最近更新 更多