useEffect の中で以前の state を取得する方法
useEffect の中で以前の state を取得する方法:
別に useEffect に限定した方法でもないがユースケース的には以前の値と今の値を比べてゴニョゴニョすることは大体 useEffect だと思う。
ただ、この useEffect では componentDidUpdate のように prevState が引数に入ってこない。前回の state を保持する用の state 持つのもなんかめんどくさいしな〜と思っていたところなんと公式ドキュメントにお手製 hooks による解決策が書いてあった。
https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
こんな感じの hooks を用意する。
引数の value には以前の値を取得しておきたい state を入れておく。使う側ではこんな感じになる。
ref をDOMにしか使ったことない身としては初見では違和感満載だったが、どうやら ref は props, state など計算が走る値にはなんでもつけられるらしい。正直どうやって動いているのかよく分かっていないのでまた今度勉強してみたい。
別に useEffect に限定した方法でもないがユースケース的には以前の値と今の値を比べてゴニョゴニョすることは大体 useEffect だと思う。
例
useEffect(() => { // こんな感じのことやりたい if(prev.count - 1 === count) { // do something } }, [count])
https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
こんな感じの hooks を用意する。
function usePrevious(value: any) { const ref = useRef(null); useEffect(() => { ref.current = value; }); return ref.current; }
function Counter() { const [count, setCount] = useState(0); const prevCount = usePrevious(count); useEffect... }
コメント
コメントを投稿