React: 이전 값을 가져올 때의 동작 이해
tl;dr
렌더링된 후에 그 시점의 값을 보존해 두는 것으로, 다음의 렌더링시에 「이전의 값」을 꺼낼 수 있다.
전제 이해
코드로 보기
코드 블록마다 실행 순서를 기재했습니다.
1 -> 2 -> 3의 순서로 읽어 풀어 가면 이해하기 쉽다고 생각합니다.
import React from "react";
import ReactDOM from "react-dom";
const App: React.FC = () => {
/*************
* 1
*************/
const ref = React.useRef(null) as any;
const [count, setCount] = React.useState<number>(0);
const increment = () => setCount(prev => ++prev);
/*************
* 3
*************/
React.useEffect(() => {
console.log("[useEffect]count is ", count);
ref.current = count; // <= 現在の値を保存しておく。次回から見たら前回の値になる。
});
/*************
* 2
*************/
return (
<div className="App">
{console.log("[render]start---")}
{console.log("[render] prev is ", ref.current)}
{console.log("[render] count is ", count)}
<p>prev: {ref.current}</p>
<p>now: {count}</p>
<button onClick={increment}>+</button>
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
console.log의 결과는 다음과 같습니다.
버튼을 클릭할 때마다 빨간색 프레임당 로깅됩니다. 첫 번째 빨간색 테두리는 첫 번째 렌더링 중에 표시됩니다.
결론
React.useEffect와 render의 실행 순서를 의식하지 않았기 때문에, 조금 막혔지만 거기를 의식하면 비교적 간단하게 읽을 수 있을까 생각합니다.
덧붙여서, usePrevious처럼 커스텀 훅스도 할 수 있습니다. 앞으로도 React에서 제공될지도 모르므로, 최대한 커스텀 훅스를 만들어 두는 편이 좋을까 생각합니다. (참조: 후크 관련 FAQ – React )
Reference
이 문제에 관하여(React: 이전 값을 가져올 때의 동작 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/snamiki1212/items/8a31c544e7ae3db8cec5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)