2017-09-24 26 views
0

私は非同期アクションを持っています。これはAPIからデータを取り出し、コレクション内のコレクションとマージして、適切な計算をトリガーしてビューを再評価して読み込みます。ReactコンポーネントのライフサイクルメソッドでMobXアクションを呼び出すのは悪い習慣です

私の以前の解決策は、トリガ変数を本体に含める@ async-computedを使用することでした(残念なことに再計算をトリガする以外には使用しません)。

@ computed-async - > @asyncアクションのリファクタリングに満足していますが、私が会った最後の障害物が私をさまよいます。

@computedsが最初に到達したときに初めて計算されますが、@actionは明示的に呼び出す必要があります。

私はストアコンストラクタでそれを呼び出すことはできません。テスト可能ではないため、私ができるのはcomponentDidMountまたはReactコンポーネントのWillMountだけです。 AFAIKこれはパフォーマンス上の理由からcomponentDidMountで行う方が良いです。 しかし、(!)React life cycleメソッドでアクションを明示的に呼び出すのは問題ありませんか?それとも悪い習慣と考えるべきですか?

今のところ、私はむしろ避けていましたが、この1つのケースは@ async-actionで処理する方が良いと思われています。大きなデザインパターンを壊さない限り将来私の顔に戻る。

ありがとうございます!

+0

アップ:

は、より多くのために、この記事を参照してください?アップアップ? – azrahel

答えて

0

あなたはそれがテスト可能ではないということを意味しますか?コンポーネントがio/storeのデータを表示する必要がある場合は、スタブを使用してデータを提供できませんか? https://hackernoon.com/how-to-decouple-state-and-ui-a-k-a-you-dont-need-componentwillmount-cc90b787aa37

+0

私の@actionは、パラメータ(サーバからフェッチするアイテムの数)でフェッチされます。テストでは、ストアを作成するたびにその特定のフェッチを常に呼び出すため、固定パラメータ値を使用して明示的にコンストラクタで呼び出すことはできません。それはテスト可能ではありません。 - 0を渡しても何も取得しない場合は、APIから別の数量を取り出したりテストしたりするにはどうすればよいですか?コードがコンストラクタにある場合、私はそれをきれいにすることはできません。コンストラクターは副作用を持つべきではありません。 API呼び出し。 – azrahel

+0

テストでは、フェッチ自体(店舗の一部です)と取り出したデータをコンポーネントでどのように使用するかを分けなければならないと思います。投稿したリンクでは、フェッチはルータによって呼び出されます。 – Lucas

関連する問題