首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在状态下更新数组中某些对象的属性

在状态下更新数组中某些对象的属性
EN

Stack Overflow用户
提问于 2018-11-26 20:08:59
回答 2查看 38关注 0票数 1

我正在尝试更新我的代码:https://repl.it/@colegonzales1/HeftyJoyfulAbilities

我正在努力使我的handleToggle函数正常工作。它现在是空白的修补,但我已经花了2-3个小时试图使它的工作,以我自己的知识,但我不知道如何进入一个特定的项目在国家。我知道如何覆盖这一切,但这不是我想要做的。说我有:

代码语言:javascript
复制
this.state = {
  todos: [
    {
      title: 'Wash car',
      id: 1,
      done: false
    },
    {
      title: 'Go shopping',
      id: 2,
      done: false
    }
  ],
  inputValue: ''
}

我怎么才能把“去购物”上做的事情的价值改变成真呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-26 20:28:17

使用array.map只在与单击的id匹配的元素上切换done标志,如下所示。todo的其他属性通过对象扩展复制:

代码语言:javascript
复制
handleToggle (e) {
  const id = parseInt(e.target.id,10)
  this.setState((prevState) => ({
    todos: prevState.todos.map(t => t.id === id ? {...t, done: !t.done} : t)
  })) 
}
票数 1
EN

Stack Overflow用户

发布于 2018-11-26 20:31:32

您可以使用给定的idfindIndex找到对象的索引,并创建一个新的数组,其中包含该对象的副本,并对其done标志进行切换。

示例

代码语言:javascript
复制
class App extends React.Component {
  state = {
    todos: [
      {
        title: "Wash car",
        id: 1,
        done: false
      },
      {
        title: "Go shopping",
        id: 2,
        done: false
      }
    ],
    inputValue: ""
  };

  handleToggle = id => {
    this.setState(prevState => {
      const todos = [...prevState.todos];
      const todoIndex = todos.findIndex(todo => todo.id === id);

      todos[todoIndex] = { ...todos[todoIndex], done: !todos[todoIndex].done };

      return { todos };
    });
  };

  render() {
    return (
      <div>
        <div>{JSON.stringify(this.state)}</div>
        <button onClick={() => this.handleToggle(2)}>
          Toggle todo with id 2
        </button>
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53488291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档