Так что мне надоело использовать кучу memo
, useMemo
и useCallbacks
для обеспечения отзывчивости моего многоуровневого приложения. Вместо этого я построил ловушку реагирования под названием useStateChange
(мне не часто нужны немедленные обновления, предоставляемые onChange).
function useStateChange(valuesInit) {
const [values, valuesSet] = useState(valuesInit);
useEffect(() => valuesSet(valuesInit), [valuesInit]);
const onChange = useCallback(({ target: { value } }) => valuesSet(value), []);
return [onChange, values, valuesSet];
}
function TestInput({ value0, onBlur }) {
console.log("Test ran");
const [onChange, value1] = useStateChange(value0);
return (
<>
<h4>
Value1:{" "}
<input type="text" value={value1} onChange={onChange} onBlur={onBlur} />
</h4>
<h5>Value1: {value1}</h5>
</>
);
}
Рабочий пример можно найти по адресу CodeSandbox .
Поскольку эта функция будет использоваться практически с каждым входом, есть ли способ для дальнейшего улучшения производительность?
Я знаю, что люди будут недовольны не чрезмерной оптимизацией, но это станет критическим компонентом моего приложения, и будет лучше, если оно будет работать в лучшем виде. Если бы я оптимизировал свою функцию useStateChange
, у меня не было бы текущих проблем с производительностью ...