useEffect の中で以前の state を取得する方法

useEffect の中で以前の state を取得する方法:

別に useEffect に限定した方法でもないがユースケース的には以前の値と今の値を比べてゴニョゴニョすることは大体 useEffect だと思う。

useEffect(() => { 
  // こんな感じのことやりたい 
  if(prev.count - 1 === count) { 
    // do something 
  } 
}, [count]) 
ただ、この useEffect では componentDidUpdate のように prevState が引数に入ってこない。前回の state を保持する用の state 持つのもなんかめんどくさいしな〜と思っていたところなんと公式ドキュメントにお手製 hooks による解決策が書いてあった。

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; 
} 
引数の value には以前の値を取得しておきたい state を入れておく。使う側ではこんな感じになる。

function Counter() { 
  const [count, setCount] = useState(0); 
  const prevCount = usePrevious(count); 
 
  useEffect... 
} 
ref をDOMにしか使ったことない身としては初見では違和感満載だったが、どうやら ref は props, state など計算が走る値にはなんでもつけられるらしい。正直どうやって動いているのかよく分かっていないのでまた今度勉強してみたい。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)