Debugging
For debugging we recommend @reatom/logger
package (included in @reatom/framework
)
Installation
npm i @reatom/logger
After install finished you need to connect logger to reatom context
import { createCtx } from '@reatom/core'
import { connectLogger } from '@reatom/logger'
const ctx = createCtx()
connectLogger(ctx)
More settings you can found in @reatom/logger documentation
Usage
Immutable nature of Reatom give us incredible possibilities for debugging any data flow kind: synchronous and asynchronous.
Let’s start from simple example.
import { createCtx, atom } from '@reatom/core'
import { connectLogger } from '@reatom/logger'
const ctx = createCtx()
connectLogger(ctx)
const counterAtom = atom(0)
const doubledAtom = atom((ctx) => counterAtom * 2)
counterAtom(ctx, 24)
This is what we see in logs:
Reatom 1 transaction
├─ 3:37:34 PM 477ms
├─ counterAtom
│ ├─ cause: "root"
│ ├─ history: [...]
│ ├─ newState: 0
│ ├─ oldState: 24
│ ├─ patch: {...}
│ └─ time: 275.94
├─ 24
├─ doubledAtom
│ ├─ cause: "<-- counterAtom"
│ ├─ history: [...]
│ ├─ newState: 0
│ ├─ oldState: 48
│ ├─ patch: {...}
│ └─ time: 275.96
└─ 48
Records comes in pairs: atom and new state value. Under atom name record you can found few properties:
- cause - describe why this update happens, why trigger it
- history - atom values that was before update
More complex example you can find in @reatom/logger package documentation