#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.