Почему реакция-редукс сравнивает состояние с оператором идентификации (===)? Объекты нельзя сравнивать таким образом - PullRequest
0 голосов
/ 03 июля 2019

Я читаю react-redux компонент Provider (https://github.com/reduxjs/react-redux/blob/master/src/components/Provider.js)

). Есть два случая, когда они сравнивают объекты с помощью оператора тождественности (===). Почему так? Мы можем 'сравнивать объекты в 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 })
    }
  }

1 Ответ

2 голосов
/ 03 июля 2019

Да, вы можете сравнивать значения таким образом. Вы можете сравнить любое два значения с === - это просто проверка, являются ли они ссылками, указывающими на одно и то же значение в памяти.

В частности, эти две проверки определяют, было ли состояние хранилища Redux неизменно обновлено путем создания новой ссылки (обычно нового корневого объекта), а также была ли обновлена ​​подпрограмма store для указания на другой экземпляр хранилища.

...