問題タブ [refluxjs]
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.
javascript - React + Flux: ストアに初期状態を取得する
最近、かなり複雑なビジネス アプリケーションを構築するために、Angular から React + Flux に切り替えました。
すべての状態をコンポーネント ツリーのプロパティとして渡す 1 つのコンテナー コンポーネントを持つというアプローチは、アプリが大きなページのようなモーダルを利用するため、アプリを開発するための実用的な方法ではありません。データをストアにロードするのに十分な状態がモーダルに渡されます。
私が抱えている問題は、いくつかの初期状態 (小道具として渡される) をモーダル コンポーネントのストアに取得する必要があることです。この投稿で、Facebook の善良な人々は、同期が目的ではない場合、初期状態に props を使用しても問題ないと述べています。
これは、現在、ストアに初期状態を取得する方法です。
これを行うためのベストプラクティスが何であるか、またはこれが Flux アンチパターンであるかどうかはわかりませんか?
javascript - アクションは店と話すべきですか?
私はフラックスアーキテクチャと反応して使用していますが、直面している問題があります。
ユーザー ID を取得してユーザーをフェッチするアクションを作成する必要があります。コードは次のとおりです。
すべてのユーザーをキャッシュするストアを使用したいので、ユーザーが以前にフェッチした場合、アクションはバックエンド呼び出しを実行しません。新しいアクションは次のようになります。
問題は、アクションでユーザー データを管理したくないということです。そのため、getFetchedUser() を実装する唯一の方法は、Users ストアをチェックインすることです。
これは良いアプローチですか?
アクションはストアにアクセスできますか?
javascript - react.js の親コンポーネントで子レンダーを検出する方法
コンポーネントのレンダリングされたマークアップをキャッシュしようとしていApp
ます。これがどういうわけか「ルールに反する」ことは知っていますが、私はサーバーレス環境(chrome-extension)にいます。ページの読み込み時に、キャッシュされApp
たマークアップを DOM に挿入したいと考えています。期待される結果は、サーバーで react-component rendererd を使用した場合と似ています。ここで説明されているとおりです: http://www.tabforacause.org/blog/2015/01/29/using-reactjs-and-application-cache-fast-synced-app/。
私のユースケースを説明するために、反応例での思考を更新しました。
- アプリ
- FilterableProductTable
- 検索バー
- ProductTable (
reflux
ストアの状態を含む)- 製品カテゴリ行
- 製品行
- FilterableProductTable
予想どおり、 ではどちらcomponentDidUpdate
もcomponentWillUpdate
呼び出されませんApp
。
コンポーネント内の更新された子コンポーネントをApp
適切な方法で検出することは可能ですか? できれば、子コンポーネント クラスを変更しないでください。
props/state を に移動することは避けたいと思いApp
ます。
javascript - RefluxJS ストアは、trigger() を呼び出すときにどのプロパティが変更されたかを示すことができますか?
私は Flux 全体に慣れていませんが、Reflux から始めて理解を深めようとしています。
私が理解しているように、Refluxストアにtrigger
は、ストアのデータが変更されたことを示すメソッドがあり、更新されたデータをそこに渡します。このデータは、 Reflux.connect mixin または同様のメソッドを使用して、React コンポーネントの状態として (または状態のプロパティの 1 つとして) 設定できます。
しかし、ストアに個別にリッスンする必要がある複数のデータ セットがある場合はどうなるでしょうか。TodoMVC RefluxJS exampletitle
を変更していて、TodoStore にtodo リスト (list
および TODO アイテムのリスト)の名前を示すプロパティも含めたいとします。プロパティ<Title>
への変更をリッスンし、変更時に をその状態として設定するコンポーネントもあるとします。title
title
を呼び出すとthis.trigger(title)
、タイトル コンポーネントが更新されますが、todo コンポーネントはタイトル文字列を状態として使用しようとするため、どのデータが変更されたかを示す方法が必要です。これら 2 つのプロパティ (title
とlist
) を別のストアに分ける必要がありますか? または、すべての呼び出しにtrigger
、プロパティを示す文字列を含める必要があります:this.trigger("title", this.title)
またはthis.trigger("todos", this.list)
. それとも、すべてのデータを 1 つのオブジェクトに結合して、リスナーが (たとえば を使用してReflux.connectFilter
) 選択する必要がありますか?
これらの最後の 2 つの例では、ストアから返されたデータを取得し、コンポーネントの状態をそれに直接設定するため、this.trigger()
呼び出しに新しいデータが導入されます。これはReflux.connect
、これ以上使用できないことを意味します。connect
これは、 を使用Reflux.listenTo(TodoStore,"onTodoChange")
して、trigger
このコンポーネントに関係のない呼び出しを除外する必要があるということですか?
javascript - React / Flux コンポーネントで状態遷移を処理する方法
ユーザー入力に反応する AJAX ベースの検索フィールドがある場合、AJAX を介してバックエンドから検索結果を要求し、検索フィールドの下のドロップダウンに結果を表示し、カーソル キーを介して検索結果をナビゲートし、esc
キーの押下に反応します。インテリジェントな方法。
現在のバックボーン ベースのコンポーネントは多くの点で壊れているため、アーキテクチャを使用React
してその検索コンポーネントを再実装したいと考えています。Flux
計画中に、私のコンポーネントには少なくとも 10 の異なる状態 (おそらくそれ以上) がありactions
、ユーザー入力によってactions
トリガーされ、非同期サーバー応答によってトリガーされるように反応する必要があることが判明しました。
質問store
1 :親コンポーネントではなく、すべての状態をモデル化する必要がありますか? つまり、すべてのユーザー入力がストアの状態 (たとえば ) を変更し:searchQuery
、:searchResults
親ビュー コンポーネントがその状態の変化に反応することを意味します。
質問2 : または、親コンポーネント自体ですべての状態をモデル化し、 a を省略しstore
、完全に削除する必要がdispatcher
ありますか?actions
質問3 :store
または親コンポーネント自体の状態の処理とは別に、コンポーネント自体は少なくとも 10 の異なる状態を持つことができ、特定の数の遷移のみが許可される必要があることが判明しました。通常、ここでステートマシンの実装をプルし、すべて:states
をモデル化し、許可され:transitions
た遷移を実行store
して、親コンポーネントでアクションが受信されるか、コールバック メソッドが呼び出されるたびに実行します。コンポーネント内でこれらの間でReact way
処理するのが正しいのは何ですか?states
transitions
states
質問Flux
4 : Javascriptの最先端の実装はどれですか? これまで逆流を見てきましたが、よくわかりません。それが私の毒です。
私はここであらゆる種類の提案を受け入れます。
reactjs - Reactjs+Refluxアプリでコンポーネントからストアを適切に初期化する方法は?
私が持っている単純なナビゲーションバーのユースケースがあります
コンポーネント
- NavBar.jsx
- NavBarItem.jsx
店舗
- NavStore.js
依存関係の使用
- 反応する
- 還流
ナビゲーションバーを次のようにレンダリングします
問題は、私の初期状態が {} であり、NavStore も同様です。関連する外部データがないため、NavStore.js を itemList 情報でどのように初期化すればよいですか?
Store に initializeData(data) のようなヘルパー メソッドを追加して、NavBar コンポーネントの render または getInitialState() で呼び出しようとしましたが、コンポーネントの this.setState() の後に常に呼び出され、ストアが初期値で再初期化されます。getInitialState() が常に this.setState() で呼び出される理由がわかりません。
アクション ディスパッチャーとして Reflux も使用していますが、すべてのアクションで getInitialState() が呼び出されています。少し奇妙に思えます。Reflux はデフォルトでコンポーネントの再作成をトリガーしますか?