为什么 react-redux 将状态与标识 (===) 运算符进行比较?对象不能以这种方式进行比较

Why does react-redux compare state with the identity (===) operator? Objects can't be compared that way

提问人:Green 提问时间:7/3/2019 更新时间:7/3/2019 访问量:168

问:

我正在阅读 的组件(https://github.com/reduxjs/react-redux/blob/master/src/components/Provider.jsreact-reduxProvider)

在两种情况下,它们使用标识 (===) 运算符比较对象。为什么会这样?我们不能以这种方式比较 JS 中的对象。究竟比较了什么?

  componentDidMount() {
    this.state.subscription.trySubscribe()

    // One
    if (this.previousState !== this.props.store.getState()) {
      this.state.subscription.notifyNestedSubs()
    }
  }


  componentDidUpdate(prevProps) {
    // Two
    if (this.props.store !== prevProps.store) {
      this.state.subscription.tryUnsubscribe()
      const subscription = new Subscription(this.props.store)
      subscription.onStateChange = this.notifySubscribers
      this.setState({ store: this.props.store, subscription })
    }
  }
javascript react-redux 比较 相等

评论

0赞 Pointy 7/3/2019
您当然可以将对象与 ;不清楚你在这里问什么。===
0赞 Green 7/3/2019
@Pointy 你到底比较了什么?对象引用?它们是不同的。房产数量?它们的类型和值可能不同。我知道我可以放在JS中的任何实例之间。但是在两个物体之间呢?===
1赞 Andrey 7/3/2019
Object reference? They are different- 并非总是如此,这就是重点。它比较引用以检查它是否是同一个对象

答:

2赞 markerikson 7/3/2019 #1

是的,您绝对可以以这种方式比较值。您可以将任意两个值进行比较 - 这只是检查它们是否是指向内存中相同值的引用。===

具体来说,这两个检查是通过创建一个新的引用(通常是一个新的根对象)来确定 Redux 存储状态是否已经不可变地更新,以及该属性是否已更新为指向不同的存储实例。store