@zedux/atoms
Version:
A Molecular State Engine for React
32 lines (29 loc) • 1.14 kB
text/typescript
import { readInstance } from '../classes/EvaluationStack'
/**
* injectAtomGetters
*
* An injector that returns an AtomGetters object. The returned AtomGetters
* dynamically register dependencies for the current atom instance when called
* synchronously during atom evaluation.
*
* ```ts
* const exampleAtom = atom('example', () => {
* const { ecosystem, get, getInstance } = injectAtomGetters()
* const dynamicVal = get(myAtom) // registers a dynamic graph edge
* const instance = getInstance(myAtom) // registers a static graph edge
* const fromEcosystem = ecosystem.get(myAtom) // doesn't register anything
*
* injectEffect(() => {
* const dynamicVal2 = get(myAtom) // doesn't register anything
* const instance2 = getInstance(myAtom) // doesn't register anything
* const fromEcosystem2 = ecosystem.get(myAtom) // doesn't register anything
* }, []) // no need to pass AtomGetters as deps; they're stable references
* })
* ```
*
* @see AtomGetters
*/
export const injectAtomGetters = () => {
const instance = readInstance()
return instance.ecosystem._evaluationStack.atomGetters
}