React.memo с методом isEqual из Lodash несовместим?

#reactjs #lodash #react-hooks

#reactjs #Lodash #реагирующие хуки

Вопрос:

Я пытаюсь преобразовать свои компоненты для использования с React.memo. проблема в том, что некоторые из моих компонентов имеют реквизиты объекта или массива, которые я хотел бы тщательно сравнить.

Просматривая документы react для memo, я могу передать функцию для сравнения.

Я предоставил ему метод Lodash isEqual для глубокого сравнения, и иногда он не работал.

Я думаю, что есть какая-то проблема с isEqual, когда он пытается сравнить компонент react с дочерним элементом внутри.

Пример структуры дочерних элементов React: пример

Запуск Lodash isEqual между двумя дочерними объектами возвращает false, даже если они полностью совпадают.

Я хотел бы найти способ продолжать использовать Lodash isEqual, поскольку он отлично работает с любым другим типом структуры, но, возможно, модифицируйте его для работы и с дочерними элементами.

Есть предложения?

Спасибо!!!

PS — Я запускаю метод Lodash следующим образом:

 const component = React.memo((props) => {
...code here with children usage..
}, (oldProps, newProps) => _.isEqual(oldProps, newProps)
  

Комментарии:

1. Это концепция react — reactjs.org/docs/react-api.html#reactchildren

2. Помните, что дочерние узлы не являются конкретно реквизитами. Таким образом, речь идет не о сравнении Lodash isEqual, а скорее об обратном вызове React.memo. У вас там есть дочерний объект?.

3. Вы когда-нибудь решали эту проблему @Kiper. Я сталкиваюсь с той же проблемой. Кажущиеся одинаковыми массивы с объектами возвращают false

Ответ №1:

У вас есть функция onClick prop, isEqual не может проверить, изменилась функция или нет, вот почему она возвращает false.