私は、キーストロークごとにバックエンドから検索提案を取得するオートコンプリートテキスト入力を備えた大きなアプリを持っています。
ユーザーが文字を削除した場合、同じクエリに対する複数のバックエンド呼び出しを避けるために、最近の検索クエリ結果を保存します。私はまた検索結果を新鮮に保つためにある期間の後にこれらのクエリを期限切れにしたいと思う。
また、バックエンド呼び出しがその正確な値に対してまだ完了していない場合は、現在のテキスト入力のためにloading
インジケータが必要です。React + Redux - オートコンプリート入力の状態を管理する
問題は、この状態とこの状態に関連するアクションを管理する場所です(以下、私が必要とする状態状態のサンプルがあります)。
メインのReduxストアでそれを管理することは、一時的な中間状態です(非常に短期間です(クエリはしばらくしてから有効期限が切れます)。同じコンポーネントのインスタンスが多数ある可能性があります異なるインスタンスが異なるバックエンド呼び出しを使用する可能性があります。
ローカルのReact Component state
オブジェクトの最近の検索クエリと検索結果を管理することは素晴らしい解決策です。
しかし、私はコンポーネント内で発射したくないバックエンドコールを持っていますが、適切なアクションとレデューサーでフルフライングFluxプロセスを行い、結果(またはエラー)をストアコネクタ。
結局のところ、ここにあるものはお互いに適切に適合していません - 私はメインのReduxストアで状態を管理したくありませんが、バックエンドコールが必要です状態)を使用して、主要減量者+店舗ライフサイクルを実行します。
堅牢ための任意のアドバイス、メンテナンス性、および簡単にフィギュアアウトせずに、ドキュメントアーキテクチャが認められます。
私は、このコンポーネントのすべてのインスタンスのために必要な状態は次のようになります。
(のは、私がdog
で入力し、最後の結果はまだ来ていなかったとしましょう):で
{ currentSearchInput: 'dog', recentQueries: [ { input: 'd', isLoading: false, results: [...] }, { input: 'do', isLoading: false, results: [...] }, { input: 'dog', isLoading: true, results: null }, ] }
しかし、今、私たちは、メインストアとローカルコンポーネントの状態の両方の結果を格納しています。それは単に "還元的に戻る"ことはできません。そのためには、減速機によって状態に保存され、次に小道具を通過する必要があり、コンポーネント状態で再び保存することをお勧めします。 – Max
しかし私は最近の5人程度しか保存しないという考えに同意します。 – Max
私はreduxを通して戻ってくると言うとき、私はあなたのAPI呼び出しの結果だけを意味しました。 API呼び出しは、アクション作成者をトリガーするアクションによってディスパッチされる必要があります。 –