【问题标题】:Can two arrays be compared in componentWillReceiveProps react method?可以在 componentWillReceiveProps react 方法中比较两个数组吗?
【发布时间】:2019-08-30 16:32:51
【问题描述】:

我正在寻找一些反应项目示例,我在这里找到了一些 https://reactjs.org/community/examples.html

其中一个是购物车项目,我检查了代码,发现了一些我无法理解的东西,比较 componentWillReceiveProps 方法中的两个数组。

我知道比较两个数组总是会返回false,这是造成混乱的根源,在这里

https://github.com/jeffersonRibeiro/react-shopping-cart/blob/master/src/components/Shelf/index.js

我的问题在这部分

 if (nextFilters !== this.props.filters) {
      this.handleFetchProducts(nextFilters, undefined);
    }

由于filters 是一个数组,如propTypes 所示。

一切都很好,这就是我提出这个问题的原因。

那么这里有什么问题,componentWillReceiveProps 是一种特殊方法,因此它至少可以在两个数组之间进行浅层比较,或者这里到底发生了什么???

【问题讨论】:

  • 是的,您可以使用 === 运算符进行比较,根据 React 文档,componentWillReceiveProps() 是不安全的,请使用 componentDidUpdate() 或 getDerivedStateFromProps()
  • 检查这里reactjs.org/docs/react-component.html#updating componentWillReceiveProps 是不安全的,应该避免使用
  • 我试过这个 [1, 2, 3] === [1, 2, 3] 并且返回 false

标签: reactjs


【解决方案1】:

这可能会重复答案,因此您可能会发现这很有用: check if two arrays contain identical objects - react componentDidUpdate 有关使用 getSnapshotBeforeUpdate(prevProps, prevState) 的信息而不是 componentWillReceiveProps,请参阅反应文档,https://reactjs.org/docs/react-component.html#getsnapshotbeforeupdate

【讨论】:

  • 拜托,我不是在问如何检查两个数组是否相等,请仔细阅读我的问题,我问的是我无法理解的某人的代码
  • 好吧,你有没有运行代码并实际看到 if 语句是否按预期工作,我的第一个想法是它没有,handleFetchProducts 无论如何都会再次被调用,如果 nextFilters === this.props .filters 没关系吧?那就是函数不必要地运行,你得到的结果和以前一样。
  • 是的,这让我很困惑,一切正常,所以我为什么要问
  • 你的意思是你因为有人写了一些糟糕的代码而感到困惑?我想你会看到很多。如果条件 if 不起作用,那么它总是错误的,因为您期望函数只是使用相同的数据调用,如果新数组中的数据真的不同,它会使用“新”数据调用
猜你喜欢
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2021-04-29
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多