Javascript 如果Station不能正常工作[React hooks]
我正在一个简单的网站与反应挂钩工作。在那个网站上,我想保护路由,如果我没有得到授权,网站应该重定向我登录,否则就转到我想访问的de路径。我有下面的代码,不管状态是真是假,它总是进入else语句。我的问题是这是怎么可能的,还是我做了一些我没有注意到的错事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
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语句中。找到了解决方案