2017-02-19 14 views
3

私はhtmlボディクラスを変更する反応コンポーネントを持っています。クラスはcomponentDidMountに追加され、componentWillUnmountで削除されています。私はタイプチェックのためにFlowを使用しています。私はフローを実行すると、私は次のエラーを取得する:React Flow可能なnull値はdocument.body.classList.addで

src/modules/homepage/HomePage.js:27 
27:   document.body.classList.remove('homepage') 
          ^^^^^^^^^ property `classList`. Property cannot be accessed on possibly null value 
27:   document.body.classList.remove('homepage') 
      ^^^^^^^^^^^^^ null 

誰もがこのエラーを抑止する方法や推奨されるアプローチであるものをお勧めすることはできますか?

ありがとうございました

答えて

4

このエラーはまったく同じです。プロパティclassListには、null値でアクセスすることはできません。 (document.body

document.bodyは、document.readyState is interactiveまで定義されていません。同様に、domcontentreadyまたはloadイベントを待つこともできますが、Reactコンポーネントをレンダリングしているので、すでにこれを実行している可能性があります。

実際には、ブラウザ環境ではdocument.bodyが定義されていても、フローは定義されたままであるため、ここでは迷惑になります。ここで

は、いくつかの簡単なソリューションです:

あなたはinvariant機能を使用することができます 不変(document.body)を、 // document.bodyがまだ存在しない場合はエラーをスローする document.body.classList.remove( 'homepage');

場合や、ブロック内の文を置く:これは本当にhelp..also私はちょうどあなたの提案..butチェックを無視する設定で正規表現と注釈// $ flowfixmeに出くわした

if (document.body) { 
    document.body.classList.remove('homepage') 
} 
+0

感謝たくさんのクリーナーです:) –

+1

残念ながら、フローは条件付きチェックを無視するので、私はdeclareに終わりましたvar document:Object;ファイルの上に –

+0

不変の関数を宣言する方法は明確ではなく、ドキュメントへの参照や例は歓迎です。 – ilyaigpetrov

関連する問題