CreateStoreOptionsType
import type { PersistOptions } from 'zustand/middleware'
interface CreateStoreOptionsType<StoreDataType> {
log?: boolean
subscribe?: boolean
persist?: Omit<
PersistOptions<StoreType<StoreDataType>>,
'name' | 'blacklist' | 'whitelist'
> & {
name?: string
getStorage: Exclude<
PersistOptions<StoreType<StoreDataType>>['getStorage'],
undefined
>
}
customMiddlewares?: ZfyMiddlewareType<StoreDataType>[]
}
import type {
State,
GetState,
SetState,
StoreApi,
StateCreator,
UseBoundStore,
EqualityChecker,
} from 'zustand'
import type {
PersistOptions,
StoreApiWithPersist,
StoreApiWithSubscribeWithSelector,
} from 'zustand/middleware'
export interface StoreType<StoreDataType> extends State {
name: string
data: StoreDataType
reset: () => void
update: (producer: (data: StoreDataType) => void) => void
}
export type CreateStoreType<StoreDataType> = UseBoundStore<
StoreType<StoreDataType>
> & {
persist?: StoreApiWithPersist<StoreType<StoreDataType>>['persist']
subscribeWithSelector?: StoreApiWithSubscribeWithSelector<
StoreType<StoreDataType>
>['subscribe']
}
export type CreateStoreConfigType<
StoreDataType,
StoreApiType extends StoreApi<StoreType<StoreDataType>> = StoreApi<
StoreType<StoreDataType>
>
> = StateCreator<
StoreType<StoreDataType>,
SetState<StoreType<StoreDataType>>,
GetState<StoreType<StoreDataType>>,
StoreApiType
>
export interface CreateStoreOptionsType<StoreDataType> {
log?: boolean
subscribe?: boolean
persist?: Omit<
PersistOptions<StoreType<StoreDataType>>,
'name' | 'blacklist' | 'whitelist'
> & {
name?: string
getStorage: Exclude<
PersistOptions<StoreType<StoreDataType>>['getStorage'],
undefined
>
}
customMiddlewares?: ZfyMiddlewareType<StoreDataType>[]
}
export type ZfyMiddlewareType<
StoreDataType,
StoreApiType extends StoreApi<StoreType<StoreDataType>> = StoreApi<
StoreType<StoreDataType>
>
> = (
storeName: string,
config: CreateStoreConfigType<StoreDataType>,
options?: CreateStoreOptionsType<StoreDataType>
) => CreateStoreConfigType<StoreDataType, StoreApiType>
export type InitStoresResetOptionsType<StoreDataType> = {
omit?: Array<keyof StoreDataType>
}
export type InitStoresType<StoresDataType> = {
stores: {
[StoreNameType in keyof StoresDataType]: CreateStoreType<
StoresDataType[StoreNameType]
>
} & {
rehydrate: () => Promise<boolean>
reset: (options?: InitStoresResetOptionsType<StoresDataType>) => void
}
useStores: <StoreNameType extends keyof StoresDataType, Output>(
storeName: StoreNameType,
selector: (data: StoresDataType[StoreNameType]) => Output,
equalityFn?: EqualityChecker<Output>
) => Output
}
API reference
log
log
log?: boolean
Setting this flag will enable/disable the custom logger middleware. The logger highlights the previous state, the payload of the update and the content of the new state.
There is a known bug if you're using Flipper as it doesn't allow syntax highlighting for logs (yet).
subscribe
subscribe
subscribe?: boolean
Setting this flag will enable/disable the new subscribeWithSelector()
middleware and make it accessible via createStore().subscribeWithSelector()
.
persist
persist
persist?: Omit<
PersistOptions<StoreType<StoreDataType>>,
'name' | 'blacklist' | 'whitelist'
> & {
name?: string
getStorage: Exclude<
PersistOptions<StoreType<StoreDataType>>['getStorage'],
undefined
>
}
It uses the same PersistOptions
as zustand's persist middleware with only 2 differences:
getStorage
is now required instead of optional. This is due to the fact that zustand uses LocalStorage by default when this field is not provided, which wouldn't work with React Native.name
is now optional instead of required. This is because zfy simply uses thename
you provided ascreateStore()
1st argument by default. Of course, you can still override it here if need be.
The detailed API reference is available here:
customMiddlewares
customMiddlewares
customMiddlewares?: ZfyMiddlewareType<StoreDataType>[]
This field allows you to provide middlewares to zfy. This could be one that you created yourself from scratch or a prebuilt zustand middleware that zfy doesn't already expose. Please refer to the Using middlewares guide if you want to know how to use this option.
Last updated
Was this helpful?