You are reading the docs for 0.9. The latest version is 0.10. Read this page for 0.10 →

createHooks

function
react/src/hooks/createHooks.ts:263
signature
createHooks<R, S, EM>(StoreContext): YoltraHooks<R, S, EM>

Factory that creates fully-typed React hooks bound to a specific store context. This is the **recommended** setup pattern for yoltra + React. It eliminates the need for explicit type parameters on every hook call, all types are inferred from the store context once, at creation time.

Type parameters

NameTypeDescription
Rextends stringReducer name union.
Sextends Record<R, any>State record keyed by R.
EMextends EventMapBaseEvent map.

Parameters

NameTypeDescription
StoreContextContext<null | StoreInstance<R, S, EM>>A React context carrying a StoreInstance<R, S, EM>.

Returns

YoltraHooks<R, S, EM>, An object with typed hooks: useStore, useEmit, useSelector, useAtomicProp, useAtomicProps, useEvent, useSuspenseAtomicProp, useSuspenseAtomicProps, and shallowEqual.

Example

example
// 1. Define your event map and state
type AppEM = { ui: { increment: number; decrement: number } };
type AppState = { counter: { value: number } };

// 2. Create a typed context
import { createContext } from 'react';
import { StoreInstance } from '@yoltra/core';
const AppStoreContext = createContext<
  StoreInstance<'counter', AppState, AppEM> | null
>(null);

// 3. Create typed hooks (do this once, export from a shared module)
const { useAtomicProp, useEmit, useEvent } = createHooks(AppStoreContext);

// 4. Use in components, no explicit generics needed
function Counter() {
  const value = useAtomicProp({ reducer: 'counter', property: 'value' });
  const emit = useEmit();
  return (
    <button onClick={() => emit('ui', 'increment', 1)}>
      Count: {value}
    </button>
  );
}