useCallback의 반응에 대한 이해
6593 단어 reactjavascriptbeginners
useRef
훅에 대해 이야기했습니다. 이 게시물에서는 useCallback
후크를 다룰 것입니다. 그럼 바로 시작하겠습니다.useCallback 후크는 무엇입니까
콜백 사용은 전달된 종속성 중 하나가 변경될 때 메모된 콜백 함수를 반환하는 후크입니다.
기다리다! useMemo가 하는 일이 아닌가요?
짧은 대답은 NO입니다! 두 후크 모두 무언가를 메모하고 있지만 완전히 다른 것을 반환합니다. useMemo 후크는 메모된 값을 반환하고 useCallback은 메모된 함수를 반환합니다.
콜백을 사용하는 이유는 무엇입니까?
useCallback
후크는 생성된 함수 중 일부가 복잡하고 구성 요소를 다시 렌더링하면 실행 시간이 느려질 수 있기 때문에 원하지 않는 함수가 실행될 수 있는 응용 프로그램을 생성할 때 매우 유용합니다.
몇 가지 동작을 살펴보겠습니다.
이 후크는 콜백 함수(useCallback)와 값이 변경될 때 후크가 실행되도록 하는 종속성 목록을 허용합니다.
기본 사용법
import { useCallback } from 'react';
const callbackVariable = useCallback(() => {
functionCall(a, b)
},[a, b]);
예시
후크 옆에 useCallback
후크를 사용할 가능성이 높습니다. 때때로 연속적인 재 렌더링 또는 무한 루프를 방지하기 위해. 아래 샌드박스의 예를 고려하십시오.
위의 예에서 작업 중인 구성 요소는 App.js
파일과 Score.js
파일입니다. 점수 구성 요소에는 props 변경 시 상태를 업데이트하고 콘솔에 메시지를 기록하는 useEffect가 있습니다.
import React, { useEffect, useState } from "react";
const Score = ({ score }) => {
const [showScore, setShowScore] = useState();
useEffect(() => {
setShowScore(score());
console.log("Component updating");
}, [score]);
return (
<div>
<div>Score here: {showScore}</div>
</div>
);
}
export default Score;
App.js
파일에는 사용자가 입력하는 모든 점수에 5를 추가하는 clacScore
함수, 사용자가 플레이어 이름을 입력할 수 있는 입력 필드 및 플레이어 이름을 전환하는 버튼이 있습니다. 모든 것이 잘 작동하는 것 같죠?
코드에 문제가 있습니다. 입력 필드에 플레이어의 이름을 입력하면 메시지가 콘솔에 기록되며 이는 페이지에서 어떤 작업을 수행할 때도 발생합니다. 점수를 업데이트할 때만 해당 메시지가 표시되기를 원하기 때문에 이것은 문제입니다.
구조에 대한 useCallbackclacScore
함수를 아래 코드로 바꿔보세요.
const clacScore = useCallback(() => {
return(scoreEntered * 5);
}, [scoreEntered]);
이제 입력 상자에 플레이어 이름을 입력하거나 플레이어 이름을 표시해 보십시오. 콘솔의 메시지는 점수를 변경할 때만 표시됩니다. 이는 useCallback
상태가 업데이트될 때 Score
구성 요소만 렌더링하도록 React에 지시하기 위해 scoreEntered
후크를 사용하고 있기 때문입니다. 따라서 후크는 실제로 작은 응용 프로그램의 성능을 높이는 데 도움이 되었습니다.
콜백은 언제 사용해야 하나요?
그래서 나는 우리가 useCallback이 굉장하다는 데 동의할 수 있다고 확신합니다. 하지만 그렇다고 해서 모든 함수를 useCallback으로 래핑해야 한다는 의미는 아닙니다. 다음과 같이 말하는 것을 기억하세요.
Too much of everything isn't cool.
예, 그것은 useCallback
및 useMemo
및 useAnything
에 적용됩니다 (잠깐! 뭐?😅).
따라서 useCallback 후크는 다음과 같은 경우에만 사용해야 합니다.
import { useCallback } from 'react';
const callbackVariable = useCallback(() => {
functionCall(a, b)
},[a, b]);
import React, { useEffect, useState } from "react";
const Score = ({ score }) => {
const [showScore, setShowScore] = useState();
useEffect(() => {
setShowScore(score());
console.log("Component updating");
}, [score]);
return (
<div>
<div>Score here: {showScore}</div>
</div>
);
}
export default Score;
const clacScore = useCallback(() => {
return(scoreEntered * 5);
}, [scoreEntered]);
Too much of everything isn't cool.
결론
관련은 없지만 슈퍼맨을 되살려야 했던 법무부 리그의 한 장면을 기억하십니까? 그들은 그를 다시 데려올 완벽한 이유가 있었습니다. 동일한 논리가 여기에 적용됩니다. useCallback을 도입한다는 것은 우리가 코드에 이미 몇 가지 복잡성을 도입하고 있음을 의미하므로 코드에서 useCallback을 사용해야 할 완벽한 이유가 있어야 합니다.
읽어주셔서 정말 감사합니다. 다음 섹션에서는
useReducer
후크를 다룰 것입니다. 기고문이나 의견이 있으시면 아래 댓글에 남겨주세요. 또한 이와 같은 더 많은 콘텐츠를 보려면 나를 팔로우하고 안전하게 지내십시오.
Reference
이 문제에 관하여(useCallback의 반응에 대한 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ilizette/understanding-usecallback-in-react-5d34텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)