♠️
[React] <react-useから学ぶ> usePrevious編
import { useEffect, useRef } from 'react';
export default function usePrevious<T>(state: T): T | undefined {
const ref = useRef<T>();
useEffect(() => {
ref.current = state;
});
return ref.current;
}
使用例
処理順
上記のcodesandboxのconsoleに注目してほしい。
buttonをonClick後のlogの出力順が、下記の順になっていたと思う。
- onClick
- usePrevious render
- App render
- usePrevious useEffect
- App useEffect
- @@@@@
useRefの特性
またuseRefの.current配下は変更されてもrerenderされない特性を持つ。
まとめ
上記の処理順と、useRefの配下が変更されてもrerenderされないことを利用して、一つ前のstate(prevValue)を保持することに成功している。
Discussion