React - Ref
Refs and the DOM
「宣言的」と「命令的」の違い
- 宣言的 (declarative)
- プロパティで制御する
isOpen
など - Controlled Component という
- プロパティで制御する
- 命令的 (imperative)
- メソッドで制御する
open()
など - 子側で勝手に操作される
- Uncontrolled Component という
- メソッドで制御する
宣言的に 子コンポーネントを操作できる場合は、必ずそうすること。 宣言的には操作できない場合や、フォームのネイティブの動作を尊重したい場合など、ごく限られた場面においては命令的に子コンポーネントを操作する。この場合に使うのが、Ref である。
いつ Ref を使うべきか
- フォーカスを扱う時、テキストを選択するとき、メディアを再生するとき
- アニメーションを発動するとき
- サードパーティの DOM ライブラリを React で使う時
Ref の作成
React.createRef()
で作成し、要素のref
属性に設定する。ref
属性はclassName
などと同じように、他のカスタムな属性とは異なる特別な役割を持っている。
コンポーネント全体で利用できるように、インスタンスプロパティに代入しておくのが一般的。
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
render() {
return <div ref={this.myRef} />;
}
}