mirror of
https://github.com/jbranchaud/til
synced 2026-01-04 23:58:01 +00:00
Add Always Use Inline Functions With Assign as an xstate til
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud).
|
For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud).
|
||||||
|
|
||||||
_1144 TILs and counting..._
|
_1145 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1336,6 +1336,7 @@ _1144 TILs and counting..._
|
|||||||
|
|
||||||
### XState
|
### XState
|
||||||
|
|
||||||
|
- [Always Use Inline Functions With Assign](xstate/always-use-inline-functions-with-assign.md)
|
||||||
- [Define Event That Does Internal Self Transition](xstate/define-event-that-does-internal-self-transition.md)
|
- [Define Event That Does Internal Self Transition](xstate/define-event-that-does-internal-self-transition.md)
|
||||||
- [Events Stop Propagating Once Handled](xstate/events-stop-propagating-once-handled.md)
|
- [Events Stop Propagating Once Handled](xstate/events-stop-propagating-once-handled.md)
|
||||||
- [Inline Actions vs Actions In Machine Options](xstate/inline-actions-vs-actions-in-machine-options.md)
|
- [Inline Actions vs Actions In Machine Options](xstate/inline-actions-vs-actions-in-machine-options.md)
|
||||||
|
|||||||
50
xstate/always-use-inline-functions-with-assign.md
Normal file
50
xstate/always-use-inline-functions-with-assign.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Always Use Inline Functions With Assign
|
||||||
|
|
||||||
|
The [`assign`
|
||||||
|
action](https://xstate.js.org/docs/guides/context.html#assign-action) allows
|
||||||
|
you to update the context of the state machine. There are a couple ways to use
|
||||||
|
`assign`, but you should prefer the inline function style.
|
||||||
|
|
||||||
|
Technically `assign` can be passed an object literal like so to set a static
|
||||||
|
value:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
actions: {
|
||||||
|
resetCount: assign({
|
||||||
|
count: 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
However, this causes confusion for the TypeScript compiler and can create
|
||||||
|
surprising and unrelated type errors in the parts the code that use the
|
||||||
|
machine.
|
||||||
|
|
||||||
|
To keep the compiler happy, you should instead use inline functions. Either
|
||||||
|
like this:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
actions: {
|
||||||
|
resetCount: assign((_context) => {
|
||||||
|
return {
|
||||||
|
count: 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
or like this:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
actions: {
|
||||||
|
resetCount: assign({
|
||||||
|
count: (_context) => 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user