Почему сравнение текущих реквизитов и nextProps с одинаковым значением возвращает false?

У меня есть компонент, который всегда получает одни и те же реквизиты. Когда я сравниваю их в жизненном цикле shouldComponentUpdate(), он возвращает false

shouldComponentUpdate(nextProps,nextState){
  if(this.props === nextProps){return false;} //returns false
  else return true;
}

Однако, если я сравниваю текущее и предыдущее состояние с одинаковым значением, они работают нормально и возвращают true

shouldComponentUpdate(nextProps,nextState){
      if(this.state === nextState){return false;}
      else return true; //return true
}

И состояние, и реквизиты являются объектами (ссылочный тип), но почему они ведут себя по-разному?


person Shaheryar ahmed    schedule 29.01.2019    source источник
comment
Вы сравниваете не по значению, вы сравниваете по ссылке   -  person Davin Tryon    schedule 29.01.2019
comment
тогда почему это дает истину, когда я сравниваю состояние, которое также является ссылочным типом?   -  person Shaheryar ahmed    schedule 29.01.2019
comment
Я думаю, что вы должны использовать только shouldComponentUpdate() для глубокого объекта prop or State и сопоставлять что-то вроде this.props.<some_object_key> === nextProps.<some_object_key> без простого сравнения ссылок (this.props=== nextProps) (из комментария @DavinTryon)   -  person Anandhu    schedule 29.01.2019
comment
Реквизит @Shaheryarahmed по умолчанию неизменяем в реакции. Но рекомендуется, чтобы состояние было неизменным stackoverflow.com/a/47471276/6727189   -  person Anandhu    schedule 29.01.2019
comment
@Shaheryarahmed, если переход состояния не произошел, React может использовать тот же объект состояния, поэтому ссылки будут одинаковыми. Но чтобы всегда обнаруживать изменения, необходимо использовать глубокое сравнение.   -  person Davin Tryon    schedule 29.01.2019
comment
@David Tryon, вы хотите сказать, что this.props и nextProps - совершенно разные объекты (разные ссылки), тогда как this.state и nextState - одни и те же объекты (одна и та же ссылка) ??   -  person Shaheryar ahmed    schedule 29.01.2019