В настоящее время я очень удивлен примерами использования нового API реагирующих хуков и тем, что вы можете с ним сделать.
Вопрос, который возник во время эксперимента, заключался в том, насколько дорого всегда создавать новую функцию-обработчик, чтобы просто выбросить ее при использовании useCallback
.
Учитывая этот пример:
const MyCounter = ({initial}) => {
const [count, setCount] = useState(initial);
const increase = useCallback(() => setCount(count => count + 1), [setCount]);
const decrease = useCallback(() => setCount(count => count > 0 ? count - 1 : 0), [setCount]);
return (
<div className="counter">
<p>The count is {count}.</p>
<button onClick={decrease} disabled={count === 0}> - </button>
<button onClick={increase}> + </button>
</div>
);
};
Хотя я обертываю обработчик в useCallback
чтобы не передавать новый обработчик каждый раз, когда он useCallback
функцию встроенной стрелки по-прежнему нужно создавать только для исключения в большинстве случаев.
Вероятно, не имеет большого значения, если я рендую только несколько компонентов. Но насколько велико влияние на производительность, если я делаю это тысячи раз? Есть ли заметное снижение производительности? И как бы избежать этого? Возможно, фабрика статических обработчиков вызывается только тогда, когда нужно создать новый обработчик?