mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
70 lines
1.5 KiB
Markdown
70 lines
1.5 KiB
Markdown
# Define Event That Does Internal Self Transition
|
|
|
|
An XState `state` can contain a state transition in the `on` object that
|
|
represents a [_self
|
|
transition_](https://xstate.js.org/docs/guides/transitions.html#self-transitions).
|
|
A self transition means that the state points to itself. In response to that
|
|
event, it will transition directly to itself, instead of to another state node.
|
|
|
|
An
|
|
[_internal_](https://xstate.js.org/docs/guides/transitions.html#internal-transitions)
|
|
self transition is one in which the transition occurs, but it never _exits_ its
|
|
state node. That means `entry` and `exit` actions won't be triggered.
|
|
|
|
The parent state node can transition directly to itself or to a child node.
|
|
Here are a couple ways to define internal self transitions directly to the
|
|
parent node.
|
|
|
|
1. Implicit
|
|
|
|
```
|
|
states: {
|
|
counting: {
|
|
on: {
|
|
INCREMENT: {
|
|
actions: ['incrementCount'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
```
|
|
|
|
No `target` is declared for `INCREMENT`, so an internal, self-transition is
|
|
implicit.
|
|
|
|
2. Explicit
|
|
|
|
```
|
|
states: {
|
|
counting: {
|
|
on: {
|
|
INCREMENT: {
|
|
internal: true,
|
|
actions: ['incrementCount'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
```
|
|
|
|
This says that the transition should be an `internal` one.
|
|
|
|
3. Undefined Target
|
|
|
|
```
|
|
states: {
|
|
counting: {
|
|
on: {
|
|
INCREMENT: {
|
|
target: undefined,
|
|
actions: ['incrementCount'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
```
|
|
|
|
An undefined target is an internal, self-transition.
|
|
|
|
[source](https://dev.to/jbranchaud/1-7-gui-tasks-with-react-and-xstate-counter-4l9i)
|