const [value, setValue] = useState(0)
const foo = useCallback((index) => {
setValue(1)
return 20
}, [])
return (
<>
<div>{foo(1)}</div>
</>
)
У нас же после первого срабатывания foo value станет 1, и больше он не будет изменяться
почему ? функция же вызывается, а значит срабатывает
В рендере вызывается foo, в foo вызывается setValue, setValue вызывет рендер
Я понимаю это так: 1. У нас вызывается foo(1) внутри дива 2. Вызывается foo 3. foo делает setValue(1) 4. value теперь === 1 5. У нас происходит ререндер 6. Вызывается foo(1) внутри дива 7. Происходит setValue(1), но т.к. value уже 1, то соответственно ререндер не произойдет, и foo(1) больше не вызовется
Сравнение текущего и нового стейта будет происходить только если компонент обернуть в React.memo
А разве React.memo не для сравнения пропсов?
Да, точно, сорри.
любой сетСтейт вызовет перерендер, не зависимо от значения
Обсуждают сегодня