问题描述
使用mobx储存了我的导航但是发现我强制刷新页面,存储的状态就丢失了
解决方案
-
本地存储
使用浏览器的本地存储(localStorage 或 sessionStorage)将状态数据保存在客户端。这样,即使页面刷新,数据也能被恢复。
class AppStore { // ... 其他代码 ... constructor() { makeAutoObservable(this); const storedNavData = localStorage.getItem('navData'); this.saveNav(storedNavData ? JSON.parse(storedNavData) : []); } saveNav(navData) { this.navData = navData; localStorage.setItem('navData', JSON.stringify(navData)); } // ... 其他代码 ... }
-
使用 React Router 和 React Context
如果你的应用使用 React Router,你可以结合 React Context 来管理一些全局状态。这些状态可以通过 Context 提供者提供,并在整个应用中共享。这样,即使页面刷新,Context 中的状态也能够被保留。
// 创建一个 Context import { createContext, useContext } from 'react'; const AppContext = createContext(); export const AppProvider = ({ children }) => { const appStore = useStore(); // 使用你的 MobX store return <AppContext.Provider value={appStore}>{children}</AppContext.Provider>; }; export const useAppStore = () => useContext(AppContext);在你的应用的顶层组件中,使用
AppProvider 包裹整个应用。这样,在刷新时,Context 中的状态仍然存在。import { AppProvider } from './path-to-your-context-file'; const App = () => { return ( <AppProvider> {/* 其他组件 */} </AppProvider> ); }; export default App;在需要访问全局状态的组件中,使用
useAppStore 来获取 MobX store。