You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React使用Context API管理状态时刷新页面如何恢复之前的状态?

React Context API 状态刷新持久化方案

你只需要结合localStorage/sessionStorage做「初始化读取」+「变化自动存储」两步即可,以下是完整修改代码:

步骤1:修改Reducer.js,调整初始状态读取逻辑

优先从本地存储读取之前保存的状态,读取失败/无存储内容时使用默认值:

// 新增:从本地存储加载初始状态
const loadSavedState = () => {
  const saved = localStorage.getItem('app_global_state');
  if (!saved) return {
    name: "",
    address: "",
    graduated: false,
    language: []
  };
  try {
    return JSON.parse(saved);
  } catch (err) {
    // 存储内容损坏时降级到默认值
    console.warn('状态缓存损坏,已重置为默认值', err);
    localStorage.removeItem('app_global_state');
    return {
      name: "",
      address: "",
      graduated: false,
      language: []
    };
  }
}

// 初始状态改为从加载函数获取
export const initialState = loadSavedState();

const reducer = (state, action) => {
  switch (action.type) {
    case "UPDATE_INFO":
      return {
        ...state,
        name: action.name,
        address: action.address,
        graduated: action.graduated,
        language: action.language,
      }
    default:
      return state;
  }
}
export default reducer;

步骤2:修改StateProvider.js,状态变化自动同步到本地存储

不需要在每个reducer的case里写存储逻辑,统一监听state变化自动持久化:

import React, { createContext, useReducer, useContext, useEffect } from "react";

export const StateContext = createContext();

export const StateProvider = ({ reducer, initialState, children }) => {
  const reducerReturn = useReducer(reducer, initialState);
  const [state] = reducerReturn;

  // 状态变化时自动存到localStorage
  useEffect(() => {
    localStorage.setItem('app_global_state', JSON.stringify(state));
  }, [state]);

  return (
    <StateContext.Provider value={reducerReturn}>
      {children}
    </StateContext.Provider>
  )
}

export const useStateValue = () => useContext(StateContext);

可选调整

如果需要关闭浏览器就清空状态,把所有代码里的localStorage替换为sessionStorage即可。
如果后续需要手动清空持久化的状态,直接调用localStorage.removeItem('app_global_state')再刷新页面即可。

内容的提问来源于stack exchange,提问作者MPK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:06:05