Replies: 3 comments
-
Feature Request: Add built-in
|
Beta Was this translation helpful? Give feedback.
-
|
When using the slice pattern with The error maybe looks like: "Type This happens because The fix is to set the first generic to the full combined store type, and keep the fourth generic as the slice type to constrain the return value: // before (error)
const Store1: StateCreator<Store1_t, [["zustand/immer", never]], [], Store1_t>
// after (works)
const Store1: StateCreator<Store_t, [["zustand/immer", never]], [], Store1_t>
Full example: import { create, StateCreator } from "zustand";
import { subscribeWithSelector } from "zustand/middleware";
import { immer } from "zustand/middleware/immer";
interface AppSliceType {
count: number;
increment: () => void;
}
interface DrawerSliceType {
drawer: {
open?: boolean;
toggle: () => void;
};
}
interface StoreType extends AppSliceType, DrawerSliceType {}
const createAppSlice: StateCreator<
StoreType,
[["zustand/immer", never]],
[],
AppSliceType
> = (set) => ({
count: 0,
increment: () => set((state) => { state.count += 1; }),
});
const createDrawerSlice: StateCreator<
StoreType,
[["zustand/immer", never]],
[],
DrawerSliceType
> = (set) => ({
drawer: {
toggle: () => set((state) => { state.drawer.open = !state.drawer.open; }),
},
});
const useStore = create<StoreType>()(
subscribeWithSelector(
immer((...args) => ({
...createAppSlice(...args),
...createDrawerSlice(...args),
}))
)
); |
Beta Was this translation helpful? Give feedback.
-
|
when you write the code plz use markdown code blocks.. this discussion is too hard to read and understand to me.. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
import { create, StateCreator } from "zustand"
import { Store1, type Store1_t } from "./appStore"
import { subscribeWithSelector } from "zustand/middleware"
import { immer } from "zustand/middleware/immer"
interface Store2_t {
rootDrawer: {
open?: boolean,
openSet: () => void
}
}
interface Store_t extends Store2_t, Store1_t { }
const Store2: StateCreator<Store_t, [["zustand/immer", never]], [], Store2_t> = (set, get) => {
return {
rootDrawer: {
openSet: () => set(s => {
s.rootDrawer.open = !s.rootDrawer.open
})
}
}
}
/**
参数“nextStateOrUpdater”和“nextStateOrUpdater” 的类型不兼容。
不能将类型“Store1_t | ((state: WritableDraft<Store1_t>) => void)”分配给类型“Store_t | ((state: WritableDraft<Store_t>) => void)”。
不能将类型“Store1_t”分配给类型“Store_t | ((state: WritableDraft<Store_t>) => void)”。
类型 "Store1_t" 中缺少属性 "rootDrawer",但类型 "Store_t" 中需要该属性。ts(2345)
remoteStore.tsx(6, 5): 在此处声明了 "rootDrawer"。
*/
const webStore = create<Store_t>()(subscribeWithSelector(immer((...s) => {
return {
...Store1(...s),
...Store2(...s)
}
})))
export default webStore
Beta Was this translation helpful? Give feedback.
All reactions