Skip to content

状态机演员

状态机演员是其逻辑由有限状态机或状态图表示的演员。

状态机演员功能

功能备注
接收事件状态机演员可以直接接收事件 (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 }

状态机演员输出

阅读状态机输出以获取更多信息。