React/子コンポーネントのフィールドから値を取得する

キーワード

  • React
  • コンポーネント
  • react-new-window

したいこと

react-new-window で開いた別ウィンドウを印刷させたい、のがきっかけ。

window.print();

すると、親ウィンドウが印刷されてしまう。

ので、react-new-window がそのコンポーネントで保持する this.window の値を取得したい。react-new-window は window.open() したときの戻り値を this.window に保持している。

どうやって

ref を使う。

<NewWindow {...newWindowProps} ref={element => this.newWindow = element} />

目的の window オブジェクトでプリントするには、

this.newWindow.window.print();

なお書き

%%element がないよ、みたいなタイミングがあったので三項演算子した。%%

%%なお、%% this.newWindow とするには関数ではくて React.Component のサブクラスにする必要がある。

標準的なやり方ではフィールドを使わない

Thinking in React - React」によると、

  • 変更のある値はstateにする
  • またがってstateを利用するコンポーネントのルートがstateをもつ
  • 子コンポーネントからの伝達はハンドラにてする

ということのはずなので、通常はフィールドに変更のある値を持たない。従ってrefを使うこともない。

今回のは NewWindow がもってしまっているので、通常のケースではない。

参考

作成日 2018-05-14