javascript - Array.prototype.map() 需要来自箭头函数 array-callback-return 的返回值

标签 javascript node.js reactjs

真的不知道为什么这么说,但这是我相信它正在谈论的代码

setUpdate(text, key) {
  const items = this.state.items;
  items.map((item) => {
    if (item.key === key) {
      item.text = text;
    }
  });
  this.setState({
    items: items,
  });
}

最佳答案

问题

Array.prototype.map函数映射一对一关系,生成的数组将与原始数组的长度相同。该错误表明您没有显式返回每个迭代元素的值。

您也不保存生成的映射数组。代码的结果是对 items 的迭代数组和突变 item.text = text; 。在 React 中,state 和 props 被认为是不可变的,直接改变它们是非常反模式的。

setUpdate(text, key){
  const items = this.state.items; // <-- saved state reference
  items.map(item=>{ // <-- missing result array save
    if(item.key===key){
      item.text= text; // <-- state mutation!
    }
    // <-- missing return value (the error)
  })
  this.setState({
    items: items // <-- same reference to previous state!
  })
}

解决方案

您将需要浅复制数组以及正在更新的任何嵌套对象。使用功能状态更新从前一个状态的状态数组正确创建下一个状态数组。这样做的原因是下一个版本的items 必然取决于之前的数组。

setUpdate(text, key) {
  this.setState((prevState) => ({
    items: prevState.items.map((item) =>
      item.key === key ? { ...item, key: text } : item
    )
  }));
}

关于javascript - Array.prototype.map() 需要来自箭头函数 array-callback-return 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67529109/

相关文章:

javascript - 使用 findIndex 查找和更新对象中深度嵌套数组的性能

javascript - 重新加载 iframe 时捕获 javascript 事件

javascript - 如何在mongodb数据库上存储setTimeout id?

javascript - 在 NightmareJS 实例中保留 cookie

javascript - 如何避免在 React 中额外包装 <div>?

javascript - 如何根据选项文本获取选项索引

javascript - 为什么对象方法不返回值?

javascript - 在 res 范围之外的 node.js 中使用 i18n-2

javascript - RadioGroup 内的 Dynamic FormControlLabel Radio 未被检查

javascript - 如何访问从父组件传递到子组件的属性的某些数据?