|
|
@@ -3,42 +3,71 @@ import {FC, ReactNode, useEffect} from 'react';
|
|
|
import {context, pageContext, useContextReducer} from './context';
|
|
|
import {usePageContextReducer} from '@hooks';
|
|
|
import TableList from './table';
|
|
|
-import {useLocation, useNavigate} from 'react-router-dom';
|
|
|
+import {useLocation} from 'react-router-dom';
|
|
|
import {MENU_PATH} from '@routes';
|
|
|
+import {clearHistoryState} from '@utils';
|
|
|
|
|
|
const MenuProvider: FC<{children: ReactNode}> = function({children}) {
|
|
|
const state = useContextReducer();
|
|
|
+ const dispatch = state[1];
|
|
|
const {Provider} = context;
|
|
|
|
|
|
+ const {state: locationState, pathname} = useLocation();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 为主菜单时如果有state数据更新为state数据
|
|
|
+ * 为二级菜单时重置数据
|
|
|
+ */
|
|
|
+ useEffect(function() {
|
|
|
+ if (pathname === MENU_PATH)
|
|
|
+ locationState && dispatch({type: 'SEARCH', payload: {name: locationState.name}});
|
|
|
+ else
|
|
|
+ dispatch({type: 'RESET'});
|
|
|
+ }, [dispatch, locationState, pathname]);
|
|
|
+
|
|
|
return <Provider value={state}>{children}</Provider>;
|
|
|
};
|
|
|
|
|
|
const PageProvider: FC<{children: ReactNode}> = function({children}) {
|
|
|
- const {state: locationState} = useLocation();
|
|
|
- const state = usePageContextReducer(locationState);
|
|
|
+ const {state: locationState, pathname} = useLocation();
|
|
|
+ const useLocationState = pathname === MENU_PATH;
|
|
|
|
|
|
+ const state = usePageContextReducer(useLocationState && locationState);
|
|
|
+ const dispatch = state[1];
|
|
|
const {Provider} = pageContext;
|
|
|
|
|
|
- // 为了清除state 防止刷新后依旧使用state
|
|
|
- const navigate = useNavigate();
|
|
|
+ // 为了清除state 防止刷新后依旧使用state导致页码等数据错误
|
|
|
+ useEffect(function() {
|
|
|
+ useLocationState && locationState && clearHistoryState();
|
|
|
+ }, [locationState, useLocationState]);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 为主菜单时如果有state数据更新为state数据
|
|
|
+ * 为二级菜单时重置数据
|
|
|
+ */
|
|
|
useEffect(function() {
|
|
|
- if (locationState?.pathValue === MENU_PATH)
|
|
|
- navigate(MENU_PATH);
|
|
|
- }, [navigate, locationState?.pathValue]);
|
|
|
+ if (useLocationState)
|
|
|
+ locationState && dispatch({
|
|
|
+ type: 'EDIT_PAGE',
|
|
|
+ payload: {page: locationState.page, pageSize: locationState.pageSize},
|
|
|
+ });
|
|
|
+ else
|
|
|
+ dispatch({type: 'RESET'});
|
|
|
+ }, [dispatch, locationState, useLocationState]);
|
|
|
|
|
|
return <Provider value={state}>{children}</Provider>;
|
|
|
};
|
|
|
|
|
|
const Menu: FC = function() {
|
|
|
return (
|
|
|
- <MenuProvider>
|
|
|
- <PageProvider>
|
|
|
+ <PageProvider>
|
|
|
+ <MenuProvider>
|
|
|
<main className='content-main'>
|
|
|
<Filter />
|
|
|
<TableList />
|
|
|
</main>
|
|
|
- </PageProvider>
|
|
|
- </MenuProvider>
|
|
|
+ </MenuProvider>
|
|
|
+ </PageProvider>
|
|
|
);
|
|
|
};
|
|
|
|