为了账号安全,请及时绑定邮箱和手机立即绑定

刷新时反应钩子和上下文 api localstorage

刷新时反应钩子和上下文 api localstorage

慕码人2483693 2022-10-21 17:34:38
在我的 SPA 中,我使用了反应钩子和上下文 API。我需要保持使用上下文 API 渲染的组件视图的当前状态,以便我可以通过应用程序实现全局组件条件渲染。我在一个仪表板页面上有两个视图:概述和详细信息。该按钮触发全局状态更改,即使在页面刷新时视图也应固定在状态值上。这是我的代码片段:AppRoutes 文件import React, { useState } from "react";import { Router, Route, Switch } from "react-router-dom";import history from "../utils/history";import { PyramidProvider } from "../context/pyramidContext";import Dashboard from "../pages/dashboard/Dashboard";const AppRoutes = () => {  return (    <div>      <React.Suspense fallback={<span>Loading...</span>}>          <Router history={history}>            <Switch>              <PyramidProvider>                <Route path="/" component={Dashboard} />              </PyramidProvider>            </Switch>          </Router>      </React.Suspense>    </div>  );};export default AppRoutes;仪表板页面import React, { useState, useEffect, useContext } from "react";import { PyramidContext } from "../../context/pyramidContext";import PyramidDetail from "../../components/pyramidUI/pyramidDetail";import PyramidOverview from "../../components/pyramidUI/pyramidOverview";const Dashboard = (props) => {  const { info, setInfo } = useContext(PyramidContext);  return (    <React.Fragment>      {info.uiname === "overview" ? <PyramidOverview /> : <PyramidDetail />}    </React.Fragment>  );};export default Dashboard;概览组件import React, { useState, useContext } from "react";import { PyramidContext } from "../../context/pyramidContext";const Overview = (props) => {  const { info, setInfo } = useContext(PyramidContext);  return (    <div className="d-flex flex-column dashboard_wrap">      <main>        <div className="d-flex">          <button            onClick={() => setInfo({ uiname: "detail", pyramidvalue: 1 })}          >            change view          </button>        </div>      </main>    </div>  );};export default Overview;我单击按钮以呈现detail视图,一旦刷新页面,组件就会将其视图更改为 ,overview而不是停留在detail. 我检查了本地存储值,它正在正确更新,但组件视图仍然没有按照值保留。我无法理解我在哪里做错了,请帮助解决这个问题?提前致谢。
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您永远不会在信息状态中使用 localStage 的值,您应该将代码替换为:

const [info, setInfo] = useReducer(reducer, localState || initialState);


查看完整回答
反对 回复 2022-10-21
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号