home wiki.fukuchiharuki.me
Menu

#author("2018-05-09T01:39:11+00:00","default:haruki","haruki")
#author("2018-05-14T06:00:57+00:00","default:haruki","haruki")
* キーワード [#g7102040]
- React
- コンポーネント
- react-new-window

* したいこと [#p7c0026b]

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

 window.print();

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

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

* どうやって [#dcf654a4]

ref を使う。

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

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

 this.newWindow.window.print();

* ちなみに [#yd4b5d7e]
* なお書き [#yd4b5d7e]

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

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

** 標準的なやり方ではフィールドを使わない [#t70e4959]

「[[Thinking in React - React>https://reactjs.org/docs/thinking-in-react.html]]」によると、

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

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

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

* 参考 [#f88dafc9]
- [[Refs and the DOM - React>https://reactjs.org/docs/refs-and-the-dom.html]]
- [[rmariuzzo/react-new-window: 🔲 Pop new windows in React, using `window.open`.>https://github.com/rmariuzzo/react-new-window]]
- [[Reactのrefを理解する@Typescript - Qiita>https://qiita.com/knknkn1162/items/29d675c8cd26592a95b5]]