Javascript 如果Station不能正常工作[React hooks]

Javascript 如果Station不能正常工作[React hooks],javascript,html,reactjs,react-hooks,Javascript,Html,Reactjs,React Hooks,我正在一个简单的网站与反应挂钩工作。在那个网站上,我想保护路由,如果我没有得到授权,网站应该重定向我登录,否则就转到我想访问的de路径。我有下面的代码,不管状态是真是假,它总是进入else语句。我的问题是这是怎么可能的,还是我做了一些我没有注意到的错事 import React from "react"; import { Route, Redirect } from "react-router-dom"; import Login from "../auth/Login"; function

我正在一个简单的网站与反应挂钩工作。在那个网站上,我想保护路由,如果我没有得到授权,网站应该重定向我登录,否则就转到我想访问的de路径。我有下面的代码,不管状态是真是假,它总是进入else语句。我的问题是这是怎么可能的,还是我做了一些我没有注意到的错事

import React from "react";
import { Route, Redirect } from "react-router-dom";
import Login from "../auth/Login";

function PrivateRoute({ component, ...options }) {
  let status = localStorage.getItem("isAuth");
  console.log("before if ", status);

  if (status === true) {
    console.log("if", status);

    return <Route {...options} component={component} />;
  } else {
    console.log("else", status);

    return <Route {...options} component={Login} />;
  }
}
export default PrivateRoute;
从“React”导入React;
从“react router dom”导入{Route,Redirect};
从“./auth/Login”导入登录名;
函数privaterout({component,…options}){
让status=localStorage.getItem(“isAuth”);
console.log(“在if之前”,状态);
如果(状态===真){
控制台日志(“如果”,状态);
回来
}否则{
console.log(“else”,状态);
回来
}
}
导出默认私有路由;

比较
状态的方法是使用严格的等式,即
=
因此,在您的案例中,它要求您的状态值必须是
布尔值。但当您从localStorage获取它时,它是一个字符串。请记住
==
==

在许多浏览器中,本地存储只能存储
string
。因此,当您存储布尔值
true
false
时,它实际上存储字符串
“true”
“false”
。为了获取真正的布尔值,可以使用JSON


或者在您的情况下,您可以尝试比较
状态==“true”
,看看这是否有效

当您从本地存储中获取一些值时,它是一个字符串,因此请使用它:

  let status = localStorage.getItem("isAuth") === "true";

不,它也不起作用。我得到了与以前相同的console.log。您调试它了吗?在调试器上,您是否能够看到status的值为“true”?我保证不会!是的,我调试了它,我可以看到它是真的,但它不会出现在if语句中。找到了解决方案