这种来回跳的参数,"url"参数、"storage"、弹层都可以,封装一个工具统一来处理,都差不多。
你说的第二种,应该是属于表单保存功能,就是填到一半,点击保存,下次回来可以继续填,这种用接口来做。
下面是路由方案:
利用"PersistState"这个高阶组件,让列表页的状态持久化。
"列表和详情页(路由方案)" (https://link.segmentfault.com/?enc=oxanlOjtDHQyOHVgaDQRaw%3D%3D.fclKZFH0vX29gGQNVJqzfQRkQYTjB2TbIC1bhtp%2F3mxx5%2BHvxbrUE43BZkG30GANgapMvdajw1UlLElr0uLnZA%3D%3D)
import React, { useState, useEffect } from 'react';
import { RouterProvider, createHashRouter } from 'react-router-dom';
function Detail() {
const onNavigate = () => {
router.navigate('/');
};
return (
Detail
go to list
);
}
const PersistState = (WrappedComponent) => (props) => {
const initialState = JSON.parse(localStorage.getItem('persistState'));
const [state, setState] = useState(initialState);
useEffect(() => {
localStorage.setItem('persistState', JSON.stringify(state));
}, [state]);
return ;
};
function List({ state, setState }) {
const onNavigate = (id) => {
router.navigate(`/detail/${id}`);
};
return (
List
setState((_state) => ({
..._state,
name: e.target.value,
}))
}
/>
onNavigate('1')}>数据1
onNavigate('2')}>数据2
onNavigate('3')}>数据3
);
}
const PersistStateList = PersistState(List);
const router = createHashRouter([
{
path: '/',
element: ,
},
{
path: '/detail/:id',
element: ,
},
]);
function App() {
return ;
}
export default App;
手动持久化
const PersistState = (WrappedComponent) => (props) => {
const initialState = JSON.parse(localStorage.getItem('persistState'));
const [state, setState] = useState(initialState);
const save = () => {
localStorage.setItem('persistState', JSON.stringify(state));
};
const clean = () => {
localStorage.remove('persistState');
};
return (
);
};