массив с числами типо array = [0, 0, 0, 0, 0, ... , 0]; я вывожу компоненты (кнопки) для каждого итема массива, по клику на кнопку я меняю соответствующее число в массиве, и уже от этого меняю цвет кнопки, если скажем кликнули на первую кнопку, то в стейте уже будет array = [1, 0, 0, 0, 0, ... , 0];
вопрос вот в чем, каждый раз при клике все кнопки заново рендерятся, и получается что если у меня в массиве 1000 кнопок, а мы кликнули только на 1, то они все заново перерисовались, можно ли сделать чтобы менялась только одна кнопка? (вопрос по оптимизации)
через useMemo. Короче делаешь функциональный аналог классового componentShouldUpdate (в доке есть). И привязываешь к пропу который будет предыдущий с пришедшим сравнивать, через который реакт понимает - надо ему заного рисовать этот компонент или нет
можешь через memo мемоизировать кнопки
пробовал, тогда вообще ничего не меняется)
если че то рендерится массив и данные сверху хуки не помогут в такой мемоизации
хм, возможно у меня действительно что-то не так с пропсами, щас попробую поковырять, спасибо
не понял. Кода перед глазами нет. Я его кейс представляю так. Есть массив. Мы его мэппим в компоненты, в каждый компонент прокидываем ключ и значение. В этом компоненте внутри можно сравнивать - изменилось ли значение - и мемоизировать. Если еще будет уникальный ключ - то это вообще шик. И все будет работать. Что не так то?)
ты чет совсем не понял как работает мемоизация и зачем хук на мемо
Я то как раз понял. Через него мы можем сделать функциональный аналог shouldComponentUpdate - что ему и нужно, для оптимизации. Но это естественно не главная задача того, что делает useMemo. Просто его так можно использовать
useMemo ? ты не путаешь с memo ?
Путаю. Сори, ааххах.
https://codesandbox.io/s/hungry-framework-do1qe?file=/src/App.js вот накидал тебе простейшую песочницу
Обсуждают сегодня