Setup
在 XState 版本 5 中,您现在可以使用 setup({ ... })
函数来设置机器的类型和源。这有很多好处:
- 减少强类型和提供命名源的样板代码
- 更健壮的机器逻辑,因为命名源保证存在
- 更好的类型推断,用于动作、演员、守卫、延迟、上下文、事件等
- 强类型的演员快照和完成事件
- 强类型的状态值
- 源逻辑的可重用性
示例用法:
import { setup, assign } from 'xstate';
const machine = setup({
types: {
context: {} as { count: number },
events: {} as
| { type: 'inc' }
| { type: 'dec' }
},
actions: {
increment: assign({
count: ({ context }) => context.count + 1
}),
decrement: assign({
count: ({ context }) => context.count - 1
})
}
}).createMachine({
context: { count: 0 },
on: {
inc: { actions: 'increment' },
dec: { actions: 'decrement' }
}
})
设置类型
机器类型应在 setup({ types })
的 types
属性中设置。在这里,您可以设置机器的类型,包括:
context
的类型events
的类型,包括事件负载input
的类型actions
的类型,包括动作params
guards
的类型,包括守卫params
actors
的类型
从 createMachine
迁移
从裸 createMachine({ ... })
迁移到 setup({ ... }).createMachine({ ... })
来创建机器非常简单。
- 从
'xstate'
导入setup
而不是createMachine
- 将
types
从createMachine(...)
移动到setup(...)
- 将动作、演员、守卫等源从
createMachine(config, sources)
的第二个参数移动到setup({ ... })
import {
// createMachine
setup
} from 'xstate';
const machine =
setup({
types: { ... },
actions: { ... },
guards: { ... }
})
.createMachine({
// types: { ... }
}, /* { actions, guards, ... } */);