如果您发送的事件在REACTION Xstate中不存在,会发生什么情况? [英] What happens if you send an event that doesn't exist in React Xstate?

查看:31
本文介绍了如果您发送的事件在REACTION Xstate中不存在,会发生什么情况?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用此有限状态机:

{
  initial: "foo",
  states: {
    foo: {
      on: { BAR: "bar" }
    },
    bar: {
      on: { FOO: "foo" }
    }
  }
}

在我的组件中,我执行以下操作:

import { useMachine } from "@xstate/react";

export default function() {
  const [current, send] = useMachine(machine);

  useEffect(() => {
    send("BAR");
  }, []);

  return (
    <>
      Hello World  
    </>
  );
}

这是完全有效的代码,机器将切换到"BAR"状态。现在,如果我这样做会发生什么?

useEffect(() => {
  send("QUX");
}, []);

计算机中未定义QUX事件。

推荐答案

在这种情况下,状态机解释器应该忽略计划外事件。这就是状态机的工作方式。如果找不到事件,则不会进行转换评估。

根据状态机definition

状态机是一组有限的状态,它们可以因事件而相互转换

计划的事件导致计划的过渡(如果警卫通过)。

请考虑到,如果您处于foo状态,但是事件"QUX"定义在状态层次结构的上层,解释器会找到它并评估在那里定义的转换。

在分层计算机中,根据转换在树中的深度确定转换的优先级;越深的转换越具体,因此具有更高的优先级。这与DOM事件的工作方式类似:如果您单击一个按钮,则按钮上直接的单击事件处理程序比窗口上的单击事件处理程序更具体。

有关此情况的详细信息,请参阅Xstate文档的"过渡"一章中的here

这篇关于如果您发送的事件在REACTION Xstate中不存在,会发生什么情况?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆