3
2

More than 3 years have passed since last update.

React Hooks useRefでマウント時の処理を使い分ける

Last updated at Posted at 2020-10-31

React Hooksの有名な機能にuseEffectがあるが、これは第二引数に変数を指定した場合、componentDidmount時とcomponentDidUpdate時の両方に実行されることになる。

ここで、componentDidMount時とcomponentDidUpdate時で処理を使い分けたいときに便利なのがuseRef

useRefExample.jsx
import React, {
  useState, useEffect, useRef,
} from 'react';

export const useRefExample = () => {
const [stateA, setStateA] = useState(null);
const inputRef = useRef(false);

useEffect(() => {
  if(inputRef.current) { // inputRefの初期値はfalseなので初回レンダリング時には実行されない
    console.log('componentDidUpdate!');
  } else {
    console.log('componentDidMount!'); //初回レンダリング時のみこのelseブロックの中が実行される
    inputRef.current = true //inputRefの値がtrueに切り替わるため、2回目以降useEffectが実行されるとき(componentUpdate)はif文のブロックの中が実行される
  }
}, [stateA]) // 副作用はstateAに依存する

return (
  <input
    ref={inputRef}
    value={stateA}
    onChange={e => setStateA(e.target.stateA)}
  />
 );
}

useRefで宣言した変数inputRefを、useEffectのelseブロック内でfalseからtrueに書き換える。そうすることで初回レンダリング後とstateAの値が変更した時の処理を使い分けることができる。

参考サイト

useRef 公式ドキュメント
useEffectフックのしくみ
useRef は何をやっているのか

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2