問題タブ [xstate]

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.

0 投票する
1 に答える
126 参照

reactjs - useMachine と useContext を組み合わせる

ここで説明されているのと非常によく似た、共有コンテキストを介して状態の更新を処理するUIプロジェクトに取り組んでいます

一部のコンポーネントについては、xstate を使用してステート マシンをいじっていません。

ここで、理想的には、ステートに入るときにステート マシンが特定のイベントをディスパッチするようにしたいと考えています。ステート マシンが AppContext を取得するための最良の方法は何ですか?

現時点では、コンポーネント自体でこのイベント ディスパッチを処理し、ステート マシンの状態を監視して、特定の状態になったときに必要に応じてイベントをディスパッチしています。

これはうまく機能しますが、設計が悪いと思います。このイベントは、コンポーネントからではなく、ステート マシンから直接ディスパッチする方がクリーンだと思います。

ステート マシンが AppContext を取得する良い方法はありますか?

ディスパッチを引数として取り、それを保持するステート マシンのファクトリ メソッドを単純に作成するのは賢明でしょうか?

0 投票する
1 に答える
108 参照

javascript - 単体テストと xstate ガード機能の場所/方法は?

ステート マシンでガード機能を使用しています。

このガードを単体テストして(質問のために単純化しました)、常に意図したとおりに機能することを確認したいと思います(誰かがコンテキスト構造を変更するか、data.number をもたらすサーバーからのリターンを変更する可能性があります)。イベントなどに)。

どこで/どうすればいいですか? xstate を使用した場合の規則的なパターンはありますか? または、必要な場所で完全に独立した単体テストを作成する必要がありますか?

0 投票する
1 に答える
858 参照

javascript - Firebase から返されたプロミスを使用して Xstate ステート マシンを初期化する方法はありますか?

Firebase を使用して状態を保持しようとしています。現在、正常に動作し、最新の状態を Firebase に適切に保存する「saveState」関数を使用しています。

ここで、Firebase に保存された最新の状態に基づいてステート マシンを初期化できるようにしたいと考えています。以下のコードでは、'loadState' 関数を使用して Xstate に構成オブジェクトを提供しようとしています。現在、正しい状態構成を含む promise を返します。

これが私の「saveState」コードです:

これは、Firebase から正しい構成情報を含む promise を返す「loadState」関数です。

今私の問題は、上記の「loadState」関数で Xstate をロードしようとしています。ここでは、useMachine React フックを使用しようとしています。

「TypeError:未定義のプロパティ 'データ'を読み取れません」というエラーが発生します。これは、約束がまだ解決されておらず、未定義の値を読み取ろうとしているために発生していると思われます。

これは可能ですか、それとも私はこれについてすべて間違っていますか?

私はこれらすべてに慣れていないので、ガイダンスをいただければ幸いです。ありがとうございました。

0 投票する
1 に答える
986 参照

javascript - xstate: 状態を特定のノードに初期化するにはどうすればよいですか?

基本的にこれらの基本的な手順を持つマルチステップフォームがあります: select services -> contact -> billing. ユーザーが現在のステップを変更すると、進行状況バーを表示し、イベントを発行します。これは、xstate を使用した現在の基本パターンです。

視覚化は次のとおりです。 ここに画像の説明を入力

私の反応コンポーネントでは、このサービスの変更を監視pathnameして、履歴にプッシュできるようにします

ただし、ここに問題があります。ルートを再訪すると (たとえば、 に直接移動すると/billing)、すぐに に戻り/select-serviceます。これは、初期状態とサブスクリプションにより、私のコードでは理にかなっています。

特定のノードでステート マシンを初期化するにはどうすればよいですか?