SKILL.md
TanStack/store @tanstack/[email protected]
Tags: latest: 0.11.0
References: [Docs](./references/docs/_INDEX.md)
API Changes
This section documents version-specific API changes — prioritize recent major/minor releases.
- BREAKING:
new Store()->createStore()— v0.9.0 replaced the class constructor with a factory function for all store instantiations [source](./references/releases/@tanstack/[email protected])
- BREAKING:
new Derived()->createStore(fn)— v0.9.0 unified derived and simple state creation into the singlecreateStoreAPI [source](./references/releases/@tanstack/[email protected])
- BREAKING:
new Effect()->store.subscribe()— v0.9.0 removed theEffectclass; side effects are now handled directly via store subscriptions [source](./references/releases/@tanstack/[email protected])
- NEW:
createStore(initialValue)— now the standard way to initialize a store instance with a given initial state [source](./references/docs/quick-start.md)
- NEW:
createStore((prev) => next)— creates a derived store that automatically updates when dependencies change, receiving the optionalprevstate [source](./references/docs/quick-start.md)
- NEW:
createAtom()— creates a generic signal-based atom for granular reactivity, re-exported from@tanstack/store[source](./references/docs/reference/functions/createAtom.md)
- NEW:
createAsyncAtom()— factory for creating reactive atoms from asynchronous functions or Promises [source](./references/docs/reference/functions/createAsyncAtom.md)
- NEW:
batch(fn)— utility to group multiple state updates into a single notification cycle to optimize performance [source](./references/docs/reference/functions/batch.md)
- NEW:
flush()— manually triggers all pending updates across stores for immediate state consistency [source](./references/docs/reference/functions/flush.md)
- NEW:
toObserver()— utility to convert callback functions into a formalObserverobject for subscriptions [source](./references/docs/reference/functions/toObserver.md)
- NEW:
shallow()with expanded support — v0.9.1 addedDate,Map, andSetcomparison to theshallowutility to fix stale values in selectors
- NEW:
useStoreequality check —useStore(store, selector, { equal })now accepts a custom equality function for rendering control [source](./references/docs/framework/vue/reference/functions/useStore.md)
- CHANGED:
alien-signalscore — v0.9.0 switched internal reactivity toalien-signalsfor significantly improved performance [source](./references/releases/@tanstack/[email protected])
- NEW:
NoInferinuseStore— improved TypeScript inference for selected state using theNoInferutility in function signatures
Also changed: ReadOnlyStore class · Subscribable interface · AtomOptions with compare · AsyncAtomState type · Subscription object
Best Practices
- Prefer
createStore()over the deprecatednew Store()constructor — aligns with v0.9.0+ idiomatic patterns and internal optimizations [source](./references/releases/@tanstack/[email protected])
- Use a factory function within
createStore()for derived state — replaces the removedDerivedclass for better composition and efficient updates [source](./references/releases/@tanstack/[email protected])
const store = createStore({ count: 1 })
const doubled = createStore(() => store.state.count * 2)
- Pass a selector function to
useStore()for fine-grained reactivity — ensures the Vue component only re-renders when the specific selected slice of state changes [source](./references/docs/framework/vue/reference/functions/useStore.md)
- Leverage the default
shallowequality inuseStore()for object selections — prevents unnecessary re-renders when your selector returns new object/array references with identical values
- Group multiple state updates within
batch()— minimizes reactive triggers and improves performance in high-frequency update scenarios [source](./references/docs/reference/functions/batch.md)
- Use
createAsyncAtom()to manage asynchronous data — automatically tracks loading, error, and data states in a standardized format [source](./references/docs/reference/functions/createAsyncAtom.md)
- Use
store.subscribe()for side effects instead of the removednew Effect()— provides a cleaner, lifecycle-aware API for observing state changes outside of components [source](./references/releases/@tanstack/[email protected])
- Define and export stores from central modules — enables seamless state sharing across multiple Vue components and facilitates better testability [source](./references/docs/framework/vue/quick-start.md)
- Provide a custom
comparefunction inAtomOptionsfor complex state — allows fine-grained control over when an atom's value is considered "changed" to optimize downstream computations [source](./references/docs/reference/interfaces/AtomOptions.md)
- Rely on
NoInferinuseStoreselectors for accurate type safety — ensures TypeScript correctly infers the state type without being influenced by the return type of the selector