React:使用 array.find 和 array.map 方法设置状态有啥区别? [复制]

Posted

技术标签:

【中文标题】React:使用 array.find 和 array.map 方法设置状态有啥区别? [复制]【英文标题】:React: What is the difference in setting state with array.find and array.map methods? [duplicate]React:使用 array.find 和 array.map 方法设置状态有什么区别? [复制] 【发布时间】:2021-01-29 07:14:12 【问题描述】:

使用以下方法有什么区别?

我用它来更新 React 组件状态:

changeRate(id, rate) 
  let color = this.state.colors.find((c) => c.id == id);
  color.rating = rate;
  this.setState( color );

在我正在关注的书中,这是使用的:

rateColor(id, rating) 
    const colors = this.state.colors.map(color =>
    (color.id !== id) ? color :  ...color, rating )
    this.setState(colors)

【问题讨论】:

CertainPerformance 在他们的回答中谈论的是什么:Why can't I directly modify a component's state, really? 【参考方案1】:

如果您使用第一种方法,您将改变现有状态,这可能会导致不可预知的行为(例如无法重新渲染),并且在 React 中永远不应该这样做。

第二种方法不会改变现有的状态——你正在创建一个全新的颜色对象,当需要在 React 中更新状态时应该这样做。

【讨论】:

所以 array.find() 返回对通过测试的元素值的引用,而不是该值或元素的副本对吗? 对,对象/数组只有在你明确地这样做时才会被复制,例如JSON.stringify/parse,或.slice,或传播,等等。除非使用少数特定技术之一来克隆对象,否则不会克隆对象。 感谢您的帮助!

以上是关于React:使用 array.find 和 array.map 方法设置状态有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

[乐意黎原创] Array.prototype.find() 与 Array.prototype.findIndex() 使用详解

[乐意黎原创] Array.prototype.find() 与 Array.prototype.findIndex() 使用详解

javascript ES6 - Array.find和Array.findIndex

Array.find() 方法在 TypeScript 中与 req.param 一起使用

265 Array.prototype.find(),findIndex()

js 中判断数组中是不是包含某个元素