如何向机器人发出动态请求?

问题描述

我刚刚找到了一个名为Robot的有限状态模块。它非常轻巧简单。我遇到一种我无法解决的情况,那就是在Robot内为API创建动态请求。我尝试过了

robot.js

const context = () => ({
  data: [],});

export const authRobot = (request) =>
  createMachine(
    {
      ready: state(transition(CLICK,'loading')),loading: invoke(
        request,transition(
          'done','success',reduce((ctx,evt) => ({ ...ctx,data: evt }))
        ),transition(
          'error','error',ev) => ({ ...ctx,error: ev }))
        )
      ),success: state(immediate('ready')),error: state(immediate('ready')),},context
  );

我将它用在我的react组件中

// ...

export default function Login() {
  const [current,send] = useMachine(authRobot(UserAPI.getData));
  const { data } = current.context;

  function handleSubmit(e) {
    e.preventDefault();
    send(CLICK);
  }

  useEffect(() => {
    console.log(data);
    console.log(current);
    console.log(current.name);
  },[data]);

// ...

单击按钮时出现问题,我的Web控制台记录了许多数据。似乎该事件多次调用。我在这里可以做什么?

解决方法

我认为这里的问题是x86在通过另一台计算机时将触发重新渲染。由于您是在渲染函数中创建新机器,因此useMachine每次都会将其视为另一台机器。

我将在此闭包之外创建您的计算机。