我正在开发一个 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 吗?
简单地为状态机创建一个工厂方法,将调度作为参数并保留它是否明智?