状态机演员
状态机演员是其逻辑由有限状态机或状态图表示的演员。
状态机演员功能
功能 | 备注 | |
---|---|---|
✅ | 接收事件 | 状态机演员可以直接接收事件 (actor.send(event) ) 或从其他演员接收事件。 |
✅ | 发送事件 | 状态 机演员可以向其引用的其他演员发送事件。 |
✅ | 生成演员 | 状态机演员可以生成/调用演员并拥有子演员。 |
✅ | 输入 | 你可以向状态机演员提供输入 。 |
✅ | 输出 | 状态机演员可以产生输出 。 |
状态机演员逻辑
你可以使用createMachine(...)
演员逻辑创建器定义状态机演员逻辑,该创建器仅接受一个有限状态机或状态图配置对象作为其唯一参数。
import { createMachine, createActor } from 'xstate';
const toggleMachine = createMachine({
initial: 'inactive',
states: {
inactive: {
on: {
toggle: {
target: 'active'
}
}
},
active: {
on: {
toggle: {
target: 'inactive'
}
}
}
}
});
const toggleActor = createActor(toggleMachine);
toggleActor.subscribe(snapshot => {
console.log(snapshot.value); // 'inactive' 或 'active'
});
toggleActor.start();
// 记录 'inactive'
toggleActor.send({ type: 'toggle' });
// 记录 'active'
toggleActor.send({ type: 'toggle' });
// 记录 'inactive'
状态机演员输入
你可以通过将input
作为第二个参数的input
属性传递给createActor(...)
函数来向状态机演员传递input
。在状态机(setupFiles(…).createMachine(…)
)中,你可以读取传递给context
函数的第一个参数的input
属性:
import { setup, createActor } from 'xstate';
const feedbackMachine = setup({
// ...
}).createMachine({
context: ({ input }) => ({
rating: input.defaultRating
}),
initial: 'question',
states: {
question: {/* ... */},
// ...
}
});
const feedbackActor = createActor(feedbackMachine, {
input: {
defaultRating: 3
}
});
feedbackActor.subscribe(snapshot => {
console.log(snapshot.context);
});
feedbackActor.start();
// logs { rating: 3 }
状态机演员输出
阅读状态机输出以获取更多信息。