2017-12-08 13 views
0

イムは、私は、モーダルがオープンし、それが閉じているときに削除されたときにボディに追加されるクラスを必要とするプロジェクトを反応させるのにモーダルを作ります。React?を含むHTML <body>タグにクラスを追加しますか?

通常は哲学を反応させるのと同様に、私はクラスを削除/追加し、いくつかのバニラのJavaScriptを実行することにより、このに古いjQueryの方法を行うことができ、しかしこのdoesntのは感じています。

は、私は私のトップレベルのコンポーネントの代わりにSETSTATEモーダルが開いているか閉じている天候言うためにすべきか?私がこれを行ったとしても、ページ上のdivにレンダリングされたとしても、ボディエレメントを編集するための副作用があるので、この余分な配線には何のメリットがありますか?

+0

ではなく、直接身体を操作するトップレベルのコンテナを持っているのを助けるかもしれませんタグ。私はいくつかのバニラjavascript'は、あなたがcomponentDidMount' 'にクラスを追加し、componentWillUnmount''で削除することができます '好む – Brian

+0

、' mousewheel'はグローバルではなく 'philosophy'反応し、まだあなたはそれを使用します –

答えて

1

TL; DR使用document.body.classList.adddocument.body.classList.remove

私は/あなたの外側のコンポーネント内でのモーダルを隠すために状態の一部を切り替える二つの機能を持っているでしょう。私は以下のようなモーダルの状態に依存ボディクラスを操作するためdocument.body.classList.adddocument.body.classList.removeメソッドを使用することになり、これらの機能インサイド

openModal = (event) => { 
    document.body.classList.add('modal-open'); 
    this.setState({ showModal: true }); 
} 
hideModal = (event) => { 
    document.body.classList.remove('modal-open'); 
    this.setState({ showModal: false }); 
} 
0

言及@brian何と同様に、あなたの他のコンポーネントをラップトップレベルのコンテナコンポーネントを持ってみてください。このトップレベルのコンポーネントでは

を(アプリでReduxのを使用していないと仮定した場合):

  1. メソッドを追加CSSクラス
  2. を切り替えるブール状態(例えばmodalOpenを。)を追加します(たとえば、 。handleOpenModal & handleCloseModal)ブール状態を変更します。
  3. は公式にはモーダル・コンポーネントに反応しているあなたの<Modal />コンポーネントに
関連する問題