問題タブ [redux]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flux - アイテムの状態値を所有するのは誰ですか?
私の Flux アプリはリストの場所を表示します。ユーザーが場所をクリックすると、「アクティブ」になります。一度にアクティブな場所は 1 つだけです。
場所の状態は、場所自体のプロパティである必要がありますか (例: location.active
)、またはグローバルな状態の一部である必要がありactiveLocationId
ますか?
javascript - Immutable.js を redux で使用するには?
Reduxフレームワークはレデューサーを使用して、アクションに応じてアプリの状態を変更します。
重要な要件は、レデューサーが既存の状態オブジェクトを変更できないことです。新しいオブジェクトを生成する必要があります。
悪い例:
良い例:
これはImmutable.jsの適切な使用例です。
javascript - React + Redux アプリケーションでは、長時間実行されるプロセスはどこに存在しますか?
反応時間の長いプロセスは、react+redux アプリのどこで「ライブ」する必要がありますか?
簡単な例として、websocket を介してメッセージを送受信するクラスを考えてみましょう。
このクラスのライフサイクルはどのように管理する必要がありますか?
私の最初の本能は、それを維持することstore
です:
しかし、少し奇妙であることは別として、が関数にWebsocketStreamer
アクセスする方法がなくdispatch()
、ホット リロードが中断されます。
別の潜在的な解決策は、それをどこかのグローバルに保持することです。
しかし、これには明らかなテスト容易性への影響があり、ホット リロードも中断します。
では、長時間実行されるプロセスは、react + redux アプリのどこに置くべきでしょうか?
注: この単純な例は、ストアとアクション プロバイダーだけで構築できることがわかりました。しかし、長寿命のプロセスが存在する状況で、そのプロセスがどこに存在するべきかを具体的に知りたいです。
flux - 複数の状態ドメインで変更を生成するイベントを処理する方法は?
地図アプリを開発しています。これは、次の 2 つのコンポーネントで構成されています。
- 現在のユーザーの場所を表示するコンポーネント。と
- 住所の候補がある住所検索コンポーネント。
これらのコンポーネントは、次の状態ドメインに依存しています。
ユーザーが住所候補リストから住所を選択すると、イベント ハンドラーが呼び出されますonSelectAddress
。onSelectAddress
2 つの状態変化をトリガーする必要があります。
userLocation
新しい場所に設定します。と- 場所の選択プロンプトを閉じるよう通知する
これを設計する正しい方法は何ですか?
- スマート コンポーネントが 2 つのアクションを次々にディスパッチする必要があり
USER_LOCATION_CHANGE
ますADDRESS_SEARCH_HIDE
。また - スマート コンポーネントは、
USER_CHANGE_LOCATION
2 つの異なるレデューサーによって処理される単一のアクション (例: ) をディスパッチする必要がありますか?
reactjs - Flux の代わりに Redux を使用することのマイナス面は何ですか
最近Reduxを発見しました。それはすべてよさそうだ。Redux over Flux を使用することの欠点、落とし穴、または妥協点はありますか? ありがとう
javascript - 反応でモデルの変更をトゥイーンする方法、または流暢な純粋なレンダリングのために衝突を解決する場所
私の州
次の形式のアイテムの配列があります。
[{ left: 0 }, { left: 10 }, { left: 20 }]
{ left: 30 }
この配列に項目を追加できます。
[{ left: 0 }, { left: 10 }, { left: 20 }, { left: 30 }]
{ left: 20 }
この配列に重複する項目を追加できます。
[{ left: 0 }, { left: 10 }, { left: 20 }, { left: 20 }, { left: 30 }]
私の見解
これらのアイテムを平面上の位置 x にレンダリングする必要があります。ここで、x は左のプロパティです。
[{ left: 0 }, { left: 10 }, { left: 20 }]
レンダリング|item1 item2 item3|
[{ left: 0 }, { left: 10 }, { left: 20 }, { left: 30 }]
レンダリング|item1 item2 item3 item4 item5|
重複がある場合は、要素を左または右にシフトして、この重複を解決する必要があります。そう
[{ left: 0 }, { left: 10 }, { left: 20 }, { left: 20 }, { left: 30 }]
レンダリング|item1 item2 item3 item4 item5|
したがって、それらは重複してはなりません。
新しいアイテムを 1 つずつ追加できます。新しいアイテムは、10 の倍数の left プロパティを持つことができます。
オーバーラップの場合、アイテムは右にシフトしてオーバーラップを解決する必要があります。
これにより、複数のアイテムが右にシフトする可能性があります。
例:
[{ left: 0 }, { left: 10 }, { left: 20 }, { left: 20 }, { left: 30 }, { left: 40 }]
これを解決するには、左のプロパティ 30 と 40 で両方の項目をシフトする必要があります。
[{ left: 0 }, { left: 10 }, { left: 20 }, { left: 30 }, { left: 40 }, { left: 50 }]
アイテムの移動は、アニメーション化/トゥイーンする必要があります。React および Flux アーキテクチャでこの要件を適用するにはどうすればよいですか?
A.モデルの左側のプロパティを微調整し、トゥイーンを使用してビューの変更を反映することにより、ストア内の重複を解決します。- React コンポーネントでトゥイーンへの変更を反映するにはどうすればよいですか? - オーバーラップを解決するにはどうすればよいですか?
reactjs - クライアント側とサーバー側のレンダリングのために、react-router と redux を論理的に組み合わせる方法
React ベースの SPA をサーバー側でレンダリングしたいと思います (最近はそうではありません)。したがって、React をreact-router、redux 、およびisomorphic starterkitのようなビルド レイヤーと組み合わせたいと考えています。
すべてを結合するhapi Universal reduxがありますが、フローを整理する方法に苦労しています。私のデータは、REST API の複数のエンドポイントから来ています。コンポーネントが異なればデータのニーズも異なり、クライアントにジャスト イン タイムでデータをロードする必要があります。サーバーでは、特定のルート (コンポーネントのセット) のすべてのデータを取得し、必要なコンポーネントを文字列にレンダリングする必要があります。
私の最初のアプローチでは、redux のミドルウェアを使用して非同期アクションを作成しました。これは、データをロードし、promise を返し、SOME_DATA_ARRIVED
promise が解決されたときにアクションをトリガーします。次に、レデューサーがストアを更新し、コンポーネントが再レンダリングされます。すべて問題ありません。原則として、これは機能します。しかし、ルーティングが始まると、流れがぎこちなくなることに気付きました。
多数のデータ レコードを一覧表示する一部のコンポーネントには、レコードをフィルター処理するための複数のリンクがあります。フィルタリングされたすべてのデータ セットは、 のような独自の URL を介して利用できる必要があります/filter-by/:filter
。そのため、さまざまなコンポーネントを使用<Link to={...}>
して、クリック時に URL を変更し、ルーターをトリガーします。ルーターは、現在の URL によって表される状態に従ってストアを更新する必要があります。これにより、関連するコンポーネントが再レンダリングされます。
それを達成するのは容易ではありません。最初にアクションをトリガーしようとcomponentWillUpdate
しました。これにより、データが非同期に読み込まれ、ストアにデータが入力され、コンポーネントの再レンダリング サイクルがもう 1 回発生しました。ただし、これはサーバーでは機能しません。3 つのライフサイクル メソッドしかサポートされていないためです。
だから私はこれを整理する正しい方法を探しています。ユーザーの観点からアプリの状態を変更するアプリとのユーザー インタラクションは、URL を更新する必要があります。IMOこれにより、ルーターは何らかの方法で必要なデータをロードし、ストアを更新し、調整プロセスを開始する必要があります。
だからinteraction -> URL change -> data fetching -> store update -> re-render
。
initial state
要求された URL からロードするデータを決定し、その状態をstore
生成して reduxの生成に渡すことができるため、このアプローチはサーバーでも機能するはずです。しかし、私はそれを適切に行う方法を見つけていません。したがって、私には次のような疑問が生じます。
- まだ理解していない/知らないことがあるため、私のアプローチは間違っていますか?
- redux の REST API からロードされたデータを保持するのは正しい
store
ですか? state
コンポーネントをredux に保持し、store
他のコンポーネントを自分で管理するのは少し厄介ではありstate
ませんか?- 持っているという考えは
interaction -> URL change -> data fetching -> store update -> re-render
単に間違っていますか?
私はあらゆる種類の提案を受け付けています。