Compare commits
	
		
			1 Commits
		
	
	
		
			415f008209
			...
			69784e8ed4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 69784e8ed4 | 
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@kevisual/store", |   "name": "@kevisual/store", | ||||||
|   "version": "0.0.3", |   "version": "0.0.4", | ||||||
|   "main": "dist/store.js", |   "main": "dist/store.js", | ||||||
|   "module": "dist/store.js", |   "module": "dist/store.js", | ||||||
|   "types": "dist/store.d.ts", |   "types": "dist/store.d.ts", | ||||||
| @@ -63,7 +63,7 @@ | |||||||
|       "import": "./dist/web-context.js", |       "import": "./dist/web-context.js", | ||||||
|       "require": "./dist/web-context.js" |       "require": "./dist/web-context.js" | ||||||
|     }, |     }, | ||||||
|     "./page": { |     "./web-page.js": { | ||||||
|       "import": "./dist/web-page.js", |       "import": "./dist/web-page.js", | ||||||
|       "require": "./dist/web-page.js" |       "require": "./dist/web-page.js" | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ export const StoreContextProvider = ({ | |||||||
|  |  | ||||||
| type SimpleObject = Record<string, any>; | type SimpleObject = Record<string, any>; | ||||||
|  |  | ||||||
| export const useStore = (selector: any): any => { | export const useStore = function (selector: any): any { | ||||||
|   const store = useContext(StoreContext); |   const store = useContext(StoreContext); | ||||||
|   const allState = store.getState(); |   const allState = store.getState(); | ||||||
|   const selectedState = selector ? selector(allState) : allState; |   const selectedState = selector ? selector(allState) : allState; | ||||||
| @@ -58,5 +58,34 @@ export const useStore = (selector: any): any => { | |||||||
|  |  | ||||||
|   return state; |   return state; | ||||||
| }; | }; | ||||||
|  | useStore.getState = function (id: string) { | ||||||
| export type BoundStore<T> = UseBoundStore<StoreApi<T>>; |   const store = useContextKey<any>('store'); | ||||||
|  |   if (!store) { | ||||||
|  |     console.error('store not found'); | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  |   return store.getStore(id).getState(); | ||||||
|  | }; | ||||||
|  | useStore.setState = function (id: string, state: any) { | ||||||
|  |   const store = useContextKey<any>('store'); | ||||||
|  |   if (!store) { | ||||||
|  |     console.error('store not found'); | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  |   store.getStore(id).setState(state); | ||||||
|  | }; | ||||||
|  | useStore.subscribe = function (fn: any) { | ||||||
|  |   const store = useContextKey<any>('store'); | ||||||
|  |   if (!store) { | ||||||
|  |     console.error('store not found'); | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  |   return store.subscribe(fn); | ||||||
|  | }; | ||||||
|  | export type BoundStore<T> = UseBoundStore<StoreApi<T>> & { | ||||||
|  |   getState: (id: string) => T; | ||||||
|  |   setState: (id: string, state: T) => void; | ||||||
|  |   subscribe: (fn: (state: T) => void) => () => void; | ||||||
|  |   createStore: (stateCreator: StateCreator<any, [], [], any>) => void; | ||||||
|  |   createIfNotExists: (stateCreator: StateCreator<any, [], [], any>) => void; | ||||||
|  | }; | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								src/page.ts
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/page.ts
									
									
									
									
									
								
							| @@ -199,3 +199,31 @@ export class Page { | |||||||
|     this.popstate({ state } as any, { type: 'all' }); |     this.popstate({ state } as any, { type: 'all' }); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | /** | ||||||
|  |  * 获取history state | ||||||
|  |  * @returns | ||||||
|  |  */ | ||||||
|  | export const getHistoryState = <T = Record<string, any>>() => { | ||||||
|  |   const history = window.history; | ||||||
|  |   const state = history.state || {}; | ||||||
|  |   return state as T; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 设置history state | ||||||
|  |  * @param state | ||||||
|  |  */ | ||||||
|  | export const setHistoryState = (state: any) => { | ||||||
|  |   const history = window.history; | ||||||
|  |   const oldState = getHistoryState(); | ||||||
|  |   // 只更新 state 而不改变 URL | ||||||
|  |   history.replaceState({ ...oldState, ...state }, '', window.location.href); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 清除history state | ||||||
|  |  */ | ||||||
|  | export const clearHistoryState = () => { | ||||||
|  |   const history = window.history; | ||||||
|  |   history.replaceState({}, '', window.location.href); | ||||||
|  | }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user