ここで説明されているのと非常によく似た、共有コンテキストを介して状態の更新を処理するUIプロジェクトに取り組んでいます
const {appState, dispatch} = useContext(AppContext);
一部のコンポーネントについては、xstate を使用してステート マシンをいじっていません。
const SomeComponent = () => {
const {appState, dispatch} = useContext(AppContext);
const [state,send,service] = useMachine(MyComponentStateMachine);
}
ここで、理想的には、ステートに入るときにステート マシンが特定のイベントをディスパッチするようにしたいと考えています。ステート マシンが AppContext を取得するための最良の方法は何ですか?
現時点では、コンポーネント自体でこのイベント ディスパッチを処理し、ステート マシンの状態を監視して、特定の状態になったときに必要に応じてイベントをディスパッチしています。
const SomeComponent = () => {
const {appState, dispatch} = useContext(AppContext);
const [state,send,service] = useMachine(MyComponentStateMachine);
useEffect(() => service.subscribe(state => {
if(state.value == "Some relevant state of MyComponentStateMachine")
dispatch({type: SomeEvent, arg: 12345});
}).unsubscribe, [service]);
}
これはうまく機能しますが、設計が悪いと思います。このイベントは、コンポーネントからではなく、ステート マシンから直接ディスパッチする方がクリーンだと思います。
ステート マシンが AppContext を取得する良い方法はありますか?
ディスパッチを引数として取り、それを保持するステート マシンのファクトリ メソッドを単純に作成するのは賢明でしょうか?