我让Reaction路由判断用户,如果user.email存在,它会加载页面,否则它会重定向到"/login"页面.在使用导航时,这一切都运行得很好,但当我刷新浏览器时,它总是重定向到"/".如何对其进行配置,使其在刷新浏览器时保持在当前路由上?

function App() {
  const [user, setUser] = useState({});
  
  useEffect(() => {
    const theUser = localStorage.getItem("user");

    if (theUser && !theUser.includes("undefined")) {
      setUser(JSON.parse(theUser));
    }
  }, []);

  return (
    <div>
      <Navigation />
      <Routes>
        <Route
          path="/login"
          element={user?.email ? <Navigate to="/" /> : <Login />}
        />
        <Route
          path="/"
          element={user?.email ? <Home user={user} /> : <Navigate to="/login" />}
        />
        <Route 
          path="/feedback" 
          element={user?.email ? <Feedback user={user} /> : <Navigate to="/login" />} 
        />
        <Route 
          path="/candidates" 
          element={user?.email ? <Candidates user={user} /> : <Navigate to="/login" />} 
        />
        <Route 
          path="/view-feedback" 
          element={user?.email ? <ViewFeedback user={user} /> : <Navigate to="/login" />} 
        />
      </Routes>
    </div>
  )
}

推荐答案

当挂载App组件时,user的状态最初是{},并且组件呈现、104useEffect挂钩运行并判断本地存储.

使用延迟加载器函数直接初始化user状态,以便为初始渲染设置正确的值.拆下useEffect挂钩.

示例:

const [user, setUser] = useState(() => {
  const user = localStorage.getItem("user");

  if (user && !user.includes("undefined")) {
    return JSON.parse(user));
  }
  return {};
});

Javascript相关问答推荐

vue3类型脚本中可能未定义对象''

序列查找器功能应用默认值而不是读取响应

如何修复循环HTML元素附加函数中的问题?

如何在使用fast-xml-parser构建ML时包括属性值?

在React中获取数据后,如何避免不必要的组件闪现1秒?

通过嵌套模型对象进行Mongoose搜索

如何在Angular中插入动态组件

Angular material 拖放堆叠的牌副,悬停时自动展开&

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

分层树视图

CheckBox作为Vue3中的一个组件

如何控制Reaction路由加载器中的错误状态?

在使用HighChats时如何避免Datatables重新初始化错误?

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

更改预请求脚本中重用的JSON主体变量- Postman

如何在箭头函数中引入or子句?

将异步回调转换为异步生成器模式

是否可以在Photoshop CC中zoom 路径项?

如何使用基于promise (非事件emits 器)的方法来传输数据?

JWT Cookie安全性