Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在xState操作中设置上下文并激发方法_Reactjs_State Machine_Xstate - Fatal编程技术网

Reactjs 在xState操作中设置上下文并激发方法

Reactjs 在xState操作中设置上下文并激发方法,reactjs,state-machine,xstate,Reactjs,State Machine,Xstate,我有一个简单的状态机来处理输入表单 export const chatMachine = Machine({ id: 'chat', initial: 'idle', states: { idle: { on: { SET_MESSAGE: { actions: ['handleMessageChange'] }, COMMENT_SUBMITTED: { actions: ['submitComment']

我有一个简单的状态机来处理输入表单

export const chatMachine = Machine({
  id: 'chat',
  initial: 'idle',
  states: {
    idle: {
      on: {
        SET_MESSAGE: { actions: ['handleMessageChange'] },
        COMMENT_SUBMITTED: {
          actions: ['submitComment']
        }
      }
    }
  }
});
我希望
submitComment
操作触发一个函数,然后在如下上下文中重置一个字段:

submitComment: (ctx, e) => {
            e.payload(ctx.message);
            assign({
              message: ''
            });
          }
这不管用

它触发我传入的方法,但它不使其进入赋值位


我可以在一个动作中做两件事,还是应该创建两个独立的动作?

您应该创建两个独立的动作,因为这是两个独立的动作

我不确定
e.payload(ctx.message)
做了什么,但是事件应该是纯数据-您不应该将函数放在事件中

另外,
assign(…)
也不是必需的。它是一个纯函数,返回类似于
{type:'xstate.assign',…}
的操作。XState的行动都不是必须的

试试这个:

/。。。
提交的意见:{
操作:['submitComment','assignComment']
},
// ...
行动:{
提交建议:(ctx,e)=>{…},
assignComment:assign({消息:'})
}

David,感谢您提供的有用答案。如果assignComment函数需要submitComment函数提供一些数据,在这种情况下,您会怎么做?我都需要处理一些数据,然后将其设置为上下文。您可以使用“pure()”操作创建者来组合两个赋值调用。