最終更新:2022-12-16 (金) 04:20:59 (497d)  

React/Ref
Top / React / Ref

Ref は render メソッドで作成された DOM ノードもしくは React の要素にアクセスする方法を提供します。

https://ja.reactjs.org/docs/refs-and-the-dom.html

用途

  • フォーカス、テキストの選択およびメディアの再生の管理
  • アニメーションの発火
  • サードパーティの DOM ライブラリとの統合

使い方

Refを作成

React/クラスコンポーネント

  • React.createRef
  • refがrenderメソッドの要素に渡されるとアクセスできるようになる
    this.myRef = React.createRef();
    return <div ref={this.myRef} />;

Refへのアクセス

  • myRef.currentでアクセス

refの値

HTML要素

  • コンポーネントがマウントされると React は current プロパティに DOM 要素を割り当て、マウントが解除されると null に戻します
    <input ref={this.inputRef}>

(カスタム)クラスコンポーネント

  • class CustomTextInput extends React.Component {
      // ...
    }
    ...
     <CustomTextInput ref={this.inputRef}>

React/関数コンポーネント

  • 関数コンポーネントに対しては使用してはいけない (インスタンスを持たないため)
    function MyFunctionComponent() {
      return <input />;
    }
    ...
      // これは動き「ません」!
      <MyFunctionComponent ref={this.inputRef}>
  • 関数コンポーネントに対してrefを使いたい場合、forwardRefを使うかクラスに書き換える
  • DOM要素またはクラスコンポーネントを参照している限り、関数コンポーネント内で ref 属性を使用することは可能

React.createRef

useRef

  • 関数コンポーネントで使うフック

React.RefObject?

  • DOMの参照用

React.MutableRefObject?

  • 値の保持に使う場合

React/コールバックRef

React/ref

  • 参照先

React/関数コンポーネント

  • 関数コンポーネントに対して ref が使用できるようにしたい場合は、forwardRef を(必要に応じて useImperativeHandle? と組み合わせて)利用するか、コンポーネントをクラスに書き換えます。

React/Refのフォワーディング

React/コールバックRef