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()”操作创建者来组合两个赋值调用。