Defining Router Logic
Sometimes a simple status-to-status transition isn't enough.
You may want to route actions conditionally based on context, payload, or shared state.
๐ง What is Router Logic?โ
Router logic lets you override or extend transitions using:
- Contextual conditions (
ctx.state
,ctx.sv
, etc.) - Action payloads
- Runtime data
๐ Example: Conditional Transitionโ
const transitionSelectors = {
idle: {
increment: ({ ctx, payload }) => {
return ctx.state.count >= 5 ? 'cooldown' : 'incrementing';
},
},
};
This overrides the static transition and dynamically decides where to go.
๐งช Use Case Scenariosโ
Use Case | Example |
---|---|
Form validation | Go to error if ctx.state.valid === false |
API throttling | Go to cooldown if call limit exceeded |
Dynamic branching | Route based on payload flag |
โ ๏ธ Things to Watch Out Forโ
- Avoid side effects inside routing logic
- Always return a valid status string
- Consider fallback/default transitions
๐ Related Config Fieldโ
This logic is usually passed to createMachineConfig()
as:
createMachineConfig({
...transitionSelectors,
});