mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 23:19:37 +00:00
36 lines
1021 B
TypeScript
36 lines
1021 B
TypeScript
import { defineStore } from 'pinia'
|
||
import { cloneDeep, get, isEmpty, isUndefined, set,isString } from 'lodash-es'
|
||
|
||
type StoreType = Record<string, any>
|
||
|
||
const initState: StoreType = {}
|
||
// 做了一点小小的改进,可以传入key,会自动初始化,如果不初始化的话容易导致不存在值而丢失响应式
|
||
const useStore = (key?: string) => {
|
||
const store = defineStore('store', {
|
||
state: () => ({
|
||
...initState,
|
||
}),
|
||
actions: {
|
||
_get(path?: string) {
|
||
if (isEmpty(path) || isUndefined(path)) {
|
||
return this.$state
|
||
}
|
||
return get(this.$state, path)
|
||
},
|
||
_set(path: string, value: any) {
|
||
const newState = cloneDeep(this.$state)
|
||
set(newState, path, value)
|
||
this.$patch(newState)
|
||
},
|
||
},
|
||
persist: true,
|
||
})()
|
||
if (!isEmpty(key) && isString(key) && isUndefined(store?._get(key))) {
|
||
console.log('reset', key, store?._get(key))
|
||
store?._set(key, undefined)
|
||
}
|
||
return store
|
||
}
|
||
|
||
export default useStore
|