ПОЧЕМУ: Это похоже на проблему адреса ссылки / переменной памяти.
Когда вы сохраняете в itemsList
, вы создаете новую ссылку, потому что вы получаете не примитивное значение из API. JS всегда работает со ссылками, когда речь идет о не примитивных значениях. Таким образом, ваш if (this.state.itemsList !== prevState.itemsList)
всегда будет возвращать true
, потому что itemsList
- это массив, который не является примитивным набором данных, что означает, что JS не проверяет свои значения, а только ссылки.
В этом случае я вижу два решения atm:
- Запретить обновление состояния, если значения совпадают
OR
- Проверка по значениям с помощью соответствующей функции проверки в этом утверждении
if (this.state.itemsList !== prevState.itemsList)
Надеюсь, я смог объяснить. Ура!