pinia-plugin-persistedstate
pinia-plugin-persistedstate copied to clipboard
[core] support conditional storage
Sometimes we need to use a path to determine whether another path needs to be persisted, so I suggest to expanding the options.paths
type CheckStateProp = (store: PiniaPluginContext['store']) => boolean
type PropPath = string | [string, CheckStateProp]
...
// when use
paths: ['a', ['b', (store) => store.a === true]]
if a is true, b will persisted, otherwise not persisted b
Hi, i'm still considering adding per-path persistence config as suggested in #19 , could that be part of it, a per-path like this:
persist: [
{
path: 'a'
},
{
path: 'b',
persist: (store) => store.a === true
}
]
or smth like that
This would be part of a V2, for advanced use
it's all right. but I don't think it is good way. for example:
persist: [
{
path: 'a',
beforeRestore: () => {},
afterRestore: () => {},
serializer: {
serialize: JSON.stringify,
deserialize: JSON.parse,
}
},
{
path: 'b',
persist: (store) => store.a === true,
beforeRestore: () => {},
afterRestore: () => {},
serializer: {
serialize: JSON.stringify,
deserialize: JSON.parse,
}
}
]
i need to pass other properties in every item. zhuzhengshou want to to separate state values to localstorage and sessionstorage at the same time when state change.
hmm i see what you mean, i kinda saw a good opportunity as both feature ideas are linked to per-path config
ok i may have an exampls that could help you?
persist: {
serializer: {
deserialize: JSON.parse,
serialize: (state) => {
const { a, b } = state
const toStore = a ? { a, b } : { a }
return JSON.stringify(toStore)
}
}
},
You can use the serializer to define conditions for elements to be persisted or not. I think that's the best way to do it without adding "too much" to the plugin :)
Let me know if that helped
ok i may have an exampls that could help you?
persist: { serializer: { deserialize: JSON.parse, serialize: (state) => { const { a, b } = state const toStore = a ? { a, b } : { a } return JSON.stringify(toStore) } } },You can use the serializer to define conditions for elements to be persisted or not. I think that's the best way to do it without adding "too much" to the plugin :)
Let me know if that helped
yes, it works. but if i need to use custom serializer to do some complex questions, I prefer write a local pinia plugin to do this.
You can always define an external function that returns the state to store from the current state, and have concerns separated this way.
Closing this as it has a workaround, and probably won't see an implementation in the current situation. Feel free to propose new stuff :)