【问题标题】:How to properly setState to array of objects? [duplicate]如何正确地将 setState 设置为对象数组? [复制]
【发布时间】:2020-04-09 09:17:53
【问题描述】:

我有一个数组 ob 对象,它根据它们的数量创建 Close 按钮。当我单击Close 按钮时,我希望数组被更新(删除),然后按钮元素将从屏幕上消失。

我已经在console.log 进行了锻炼,但无法正确执行 setState :(

此处的示例代码:https://codesandbox.io/s/sharp-kilby-hn2d9

任何帮助将不胜感激,我相信这只是我需要正确执行它的 setState 的格式,但是因为它的对象数组等等我无法弄清楚。

【问题讨论】:

  • 请将您的代码放在您的问题中,不要链接到外部网站。
  • 或者如果你想add an item to the state
  • Emile 我试过但失败了,我想我只是写错了 setState。

标签: javascript arrays reactjs


【解决方案1】:

这里是你重写的handleclick函数,你根据需要修改后忘记返回最后的状态:

  handleClick = i => {
    this.setState(state => {
      var newState = {allProjects: []};
      for (let z = 0; z < state.allProjects.length; z++) {
        const element = state.allProjects[z].employees;
        const items = element.filter(item => item !== i);
        console.log('filter', items);
        console.log('===========');
        newState.allProjects[z] = Object.assign({}, state.allProjects[z]);
        newState.allProjects[z].employees = items;
      }
      return newState;
    });
  };

【讨论】:

  • 这会改变当前状态,这在 React 中是被禁止的。
  • 你应该自己试试,去掉“return state;”最后并意识到它不会改变当前状态,否则它不需要返回语句来工作。还是我错了?
  • state.allProjects[z].employees = items 改变您正在使用的 state 引用。
  • 哦,确实,我更正了。
  • 埃米尔,现在可以了吗?
猜你喜欢
  • 1970-01-01
  • 2015-04-24
  • 2019-09-20
  • 2014-12-24
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
相关资源
最近更新 更多