mirror of
https://github.com/pmndrs/zustand.git
synced 2025-12-08 19:45:52 +00:00
Merge branch 'main' into v5
This commit is contained in:
commit
aaa5c21fc5
@ -176,7 +176,7 @@ const createUncurried = <T>(stateCreator: zustand.StateCreator<T>) => {
|
||||
}
|
||||
|
||||
// when creating a store, we get its initial state, create a reset function and add it in the set
|
||||
export const create = (<T>() => {
|
||||
export const create = (<T>(stateCreator: zustand.StateCreator<T>) => {
|
||||
console.log('zustand create mock')
|
||||
|
||||
// to support curried version of create
|
||||
|
||||
@ -630,6 +630,54 @@ export const useBoundStore = create(
|
||||
)
|
||||
```
|
||||
|
||||
If you're using a type that JSON.stringify() doesn't support, you'll need to write your own serialization/deserialization code. However, if this is tedious, you can use third-party libraries to serialize and deserialize different types of data.
|
||||
|
||||
For example, [Superjson](https://github.com/blitz-js/superjson) can serialize data along with its type, allowing the data to be parsed back to its original type upon deserialization
|
||||
|
||||
```ts
|
||||
import superjson from 'superjson' // can use anything: serialize-javascript, devalue, etc.
|
||||
import { PersistStorage } from 'zustand/middleware'
|
||||
|
||||
interface BearState {
|
||||
bear: Map<string, string>
|
||||
fish: Set<string>
|
||||
time: Date
|
||||
query: RegExp
|
||||
}
|
||||
|
||||
const storage: PersistStorage<BearState> = {
|
||||
getItem: (name) => {
|
||||
const str = localStorage.getItem(name)
|
||||
if (!str) return null
|
||||
return superjson.parse(str)
|
||||
},
|
||||
setItem: (name, value) => {
|
||||
localStorage.setItem(name, superjson.stringify(value))
|
||||
},
|
||||
removeItem: (name) => localStorage.removeItem(name),
|
||||
}
|
||||
|
||||
const initialState: BearState = {
|
||||
bear: new Map(),
|
||||
fish: new Set(),
|
||||
time: new Date(),
|
||||
query: new RegExp(''),
|
||||
}
|
||||
|
||||
export const useBearStore = create<BearState>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
...initialState,
|
||||
// ...
|
||||
}),
|
||||
{
|
||||
name: 'food-storage',
|
||||
storage,
|
||||
}
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
### How can I rehydrate on storage event
|
||||
|
||||
You can use the Persist API to create your own implementation,
|
||||
|
||||
92
package.json
92
package.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "zustand",
|
||||
"private": true,
|
||||
"version": "4.4.5",
|
||||
"version": "4.4.6",
|
||||
"publishConfig": {
|
||||
"tag": "next"
|
||||
},
|
||||
@ -29,7 +29,7 @@
|
||||
"default": "./esm/index.mjs"
|
||||
},
|
||||
"module": {
|
||||
"types": "./index.d.ts",
|
||||
"types": "./esm/index.d.ts",
|
||||
"default": "./esm/index.js"
|
||||
},
|
||||
"default": {
|
||||
@ -38,76 +38,116 @@
|
||||
}
|
||||
},
|
||||
"./vanilla": {
|
||||
"types": "./vanilla.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/vanilla.d.mts",
|
||||
"default": "./esm/vanilla.mjs"
|
||||
},
|
||||
"module": "./esm/vanilla.js",
|
||||
"default": "./vanilla.js"
|
||||
"module": {
|
||||
"types": "./esm/vanilla.d.ts",
|
||||
"default": "./esm/vanilla.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./vanilla.d.ts",
|
||||
"default": "./vanilla.js"
|
||||
}
|
||||
},
|
||||
"./middleware": {
|
||||
"types": "./middleware.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/middleware.d.mts",
|
||||
"default": "./esm/middleware.mjs"
|
||||
},
|
||||
"module": "./esm/middleware.js",
|
||||
"default": "./middleware.js"
|
||||
"module": {
|
||||
"types": "./esm/middleware.d.ts",
|
||||
"default": "./esm/middleware.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./middleware.d.ts",
|
||||
"default": "./middleware.js"
|
||||
}
|
||||
},
|
||||
"./middleware/immer": {
|
||||
"types": "./middleware/immer.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/middleware/immer.d.mts",
|
||||
"default": "./esm/middleware/immer.mjs"
|
||||
},
|
||||
"module": "./esm/middleware/immer.js",
|
||||
"default": "./middleware/immer.js"
|
||||
"module": {
|
||||
"types": "./esm/middleware/immer.d.ts",
|
||||
"default": "./esm/middleware/immer.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./middleware/immer.d.ts",
|
||||
"default": "./middleware/immer.js"
|
||||
}
|
||||
},
|
||||
"./shallow": {
|
||||
"types": "./shallow.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/shallow.d.mts",
|
||||
"default": "./esm/shallow.mjs"
|
||||
},
|
||||
"module": "./esm/shallow.js",
|
||||
"default": "./shallow.js"
|
||||
"module": {
|
||||
"types": "./esm/shallow.d.ts",
|
||||
"default": "./esm/shallow.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./shallow.d.ts",
|
||||
"default": "./shallow.js"
|
||||
}
|
||||
},
|
||||
"./vanilla/shallow": {
|
||||
"types": "./vanilla/shallow.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/vanilla/shallow.d.mts",
|
||||
"default": "./esm/vanilla/shallow.mjs"
|
||||
},
|
||||
"module": "./esm/vanilla/shallow.js",
|
||||
"default": "./vanilla/shallow.js"
|
||||
"module": {
|
||||
"types": "./esm/vanilla/shallow.d.ts",
|
||||
"default": "./esm/vanilla/shallow.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./vanilla/shallow.d.ts",
|
||||
"default": "./vanilla/shallow.js"
|
||||
}
|
||||
},
|
||||
"./react/shallow": {
|
||||
"types": "./react/shallow.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/react/shallow.d.mts",
|
||||
"default": "./esm/react/shallow.mjs"
|
||||
},
|
||||
"module": "./esm/react/shallow.js",
|
||||
"default": "./react/shallow.js"
|
||||
"module": {
|
||||
"types": "./esm/react/shallow.d.ts",
|
||||
"default": "./esm/react/shallow.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./react/shallow.d.ts",
|
||||
"default": "./react/shallow.js"
|
||||
}
|
||||
},
|
||||
"./traditional": {
|
||||
"types": "./traditional.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/traditional.d.mts",
|
||||
"default": "./esm/traditional.mjs"
|
||||
},
|
||||
"module": "./esm/traditional.js",
|
||||
"default": "./traditional.js"
|
||||
"module": {
|
||||
"types": "./esm/traditional.d.ts",
|
||||
"default": "./esm/traditional.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./traditional.d.ts",
|
||||
"default": "./traditional.js"
|
||||
}
|
||||
},
|
||||
"./context": {
|
||||
"types": "./context.d.ts",
|
||||
"import": {
|
||||
"types": "./esm/context.d.mts",
|
||||
"default": "./esm/context.mjs"
|
||||
},
|
||||
"module": "./esm/context.js",
|
||||
"default": "./context.js"
|
||||
"module": {
|
||||
"types": "./esm/context.d.ts",
|
||||
"default": "./esm/context.js"
|
||||
},
|
||||
"default": {
|
||||
"types": "./context.d.ts",
|
||||
"default": "./context.js"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sideEffects": false,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user