Теперь с доступными хуками реагирования я должен в случае функциональных компонентов переносить каждую функцию, переданную с реквизитами, с useCallback и всеми другими значениями реквизитов с useMemo ?
ТакжеИмея пользовательскую функцию внутри моего компонента, зависящую от любого значения реквизита, следует ли мне обернуть его useCallback ?
Какова хорошая практика, чтобы решить, какие значения реквизитов или констант из переноса компонента с помощью этих хуков?
Если это улучшает производительность, почему бы не делать это постоянно?
Давайте рассмотрим пользовательскую кнопку, в которую мы помещаем обработчик нажатия, и добавляем пользовательскую логику
function ExampleCustomButton({ onClick }) {
const handleClick = useCallback(
(event) => {
if (typeof onClick === 'function') {
onClick(event);
}
// do custom stuff
},
[onClick]
);
return <Button onClick={handleClick} />;
}
Давайте рассмотрим пользовательскую кнопку, в которую мы помещаем обработчик клика, и добавляем пользовательскую логику при условии
function ExampleCustomButton({ someBool }) {
const handleClick = useCallback(
(event) => {
if (someBool) {
// do custom stuff
}
},
[someBool]
);
return <Button onClick={handleClick} />;
}
Должен ли я в этих двух случаях обернуть мой обработчик с помощью useCallback ?
Похожиеcase with use memo.
function ExampleCustomButton({ someBool }) {
const memoizedSomeBool = useMemo(() => someBool, [someBool])
const handleClick = useCallback(
(event) => {
if (memoizedSomeBool) {
// do custom stuff
}
},
[memoizedSomeBool]
);
return <Button onClick={handleClick} />;
}
В этом примере я даже передаю записанное значение в useCallback .
Другой случай, что если в дереве компонентов многие компоненты запоминают одно и то же значение?Как это влияет на производительность?