context.ts 929 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import {createPageContext} from '@hooks';
  2. import {Dispatch, useReducer} from 'react';
  3. import {useLocation} from 'react-router-dom';
  4. import {createContext} from 'use-context-selector';
  5. // #region 查询条件
  6. type State = {
  7. name: string;
  8. };
  9. type Action = {type: 'SEARCH', payload: State} | {type: 'RESET'};
  10. function reducer(state: State, action: Action): State {
  11. const {type} = action;
  12. switch (type) {
  13. case 'SEARCH': {
  14. return action.payload;
  15. }
  16. case 'RESET':
  17. return {name: ''};
  18. default:
  19. return state;
  20. }
  21. }
  22. function initState(name?: string): State {
  23. return {name: name ?? ''};
  24. }
  25. export function useContextReducer() {
  26. const {state} = useLocation();
  27. return useReducer(reducer, initState(state?.name));
  28. }
  29. export const context = createContext<[State, Dispatch<Action>]>([initState(), () => null]);
  30. // #endregion
  31. /** 页码管理 */
  32. export const pageContext = createPageContext();