Я пишу свой продукт в React Hooks, и да, я просто новичок в этом.
Сегодня у меня есть математика о производительности useCallback. Это заставляет меня задуматься о том, использовать useCallback или не использовать.
Пусть посмотрит. Как мы знаем, useCallback используется для повышения производительности.
function MainScreen() {
const [email, setEmail] = useState("");
const [pwd, setPwd] = useState(""):
const onAuthenticate = useCallback(() => {
MyApi.authenticate(email, pwd);
}, [email, pwd]);
return <div>
<MyCustomButton onPress={onAuthenticate}>LOGIN</MyCustomButton>
</div>;
}
В приведенном выше примере предположим, что есть два ввода адреса электронной почты и пароля, тогда MyCustomButton
будет отображаться при всех изменениях адреса электронной почты или пароля. Я пытался использовать useCallback
, чтобы уменьшить количество раз рендеринга, но для меня это недостаточно хорошо.
Позже я нашел способ, вынуть электронную почту и pwd в зависимости и использовать useRef
длясохранить значение адреса электронной почты и пароля.
function MainScreen() {
const [email, setEmail] = useState("");
const [pwd, setPwd] = useState(""):
const emailRef = useRef(email);
const pwdRef = useRef(pwd);
const onAuthenticate = useCallback(() => {
MyApi.authenticate(emailRef.current, pwdRef.current);
}, []);
useEffect(() => {
emailRef.current = email;
pwdRef.current = pwd;
}, [email, pwd]);
return <div>
<MyCustomButton onPress={onAuthenticate}>LOGIN</MyCustomButton>
</div>;
}
При таком подходе он останавливает рендеринг в MyCustomButton
каждый раз, когда изменяется адрес электронной почты или пароль.
Действительно ли это лучше с точки зрения производительности и стоимости? Как вы думаете, ребята?
Спасибо, что поделились.