API Reference
Complete function signatures and options for all Contection exports.
createStore
function createStore<Store>(
initialData: Store,
options?: CreateStoreOptions<Store>
): StoreInstance<Store>
Parameters
initialData- Initial state for the storeoptions.lifecycleHooks- Lifecycle callbacks (see Lifecycle and Validation)options.validate- Validation function(data: Partial<Store>) => boolean
Returns
Provider- Component wrapperConsumer- Render props component_context- Underlying React Context_initial- Initial store data
const AppStore = createStore<AppStoreType>(
{ user: { name: "", email: "" }, count: 0 },
{
lifecycleHooks: {
storeDidMount: (store, setStore) => {
const saved = localStorage.getItem("theme");
if (saved) setStore({ theme: saved });
},
},
validate: (data) => !("count" in data && data.count < 0),
}
);
useStore
function useStore<Store, T = Store>(
instance: StoreInstance<Store>,
options?: UseStoreOptions<Store, T>
): T
Options
keys?: string[]- Keys to subscribe to (omit for all)mutation?: (newStore, prevStore?, prevMutatedStore?) => T- Compute derived valueenabled?: "always" | "never" | "after-hydration" | (store) => boolean- Conditional subscription
Returns
Subscribed data or computed value. Re-renders when subscribed keys change.
const { count } = useStore(AppStore, { keys: ["count"] });
const email = useStore(AppStore, {
keys: ["user"],
mutation: (store) => store.user.email,
});
useStoreReducer
function useStoreReducer<Store>(
instance: StoreInstance<Store>
): [store, setStore, subscribe, unsubscribe]
Does not trigger re-renders.
Returns
store- Current state (read-only)setStore- Update function (object or function)subscribe- Imperative subscription(key, callback) => unsubscribeunsubscribe- Remove subscription(key, callback) => void
const [store, setStore] = useStoreReducer(AppStore);
setStore({ count: 10 });
setStore((prev) => ({ count: prev.count + 1 }));
Provider
<Provider value?: Store options?: CreateStoreOptions<Store>>
{children}
</Provider>
Each Provider creates isolated scope.
value- Optional initial value (defaults tocreateStoreinitial data)options- OverridescreateStoreoptions completely
<AppStore>
<YourComponents />
</AppStore>
<AppStore value={{ count: 100 }}>
<AppStore options={{ validate: (data) => true }}>
Consumer
Render props pattern. Same options as useStore.
<AppStore.Consumer options={{ keys: ["count"] }}>
{({ count }) => <div>{count}</div>}
</AppStore.Consumer>
Prefer useStore for better TypeScript inference.