我正在尝试检查localstorage中是否有令牌,如果有,请转到coorisponding组件,如果没有,我希望页面转到登录页面。
如果我将“ authTokenhas === true”手动更改为“ authTokenhas!== true”,则它可以正常工作,因此看来我没有正确构建if语句?
import React from 'react';
import {
Redirect,
Route
} from 'react-router-dom';
var authTokenhas = localStorage.getItem('token');
const PrivateRoute = ({component: Component, ...rest}) => (
<Route {...rest} render={(props) => (
authTokenhas === true
? <Component {...props}/>
: <Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)}/>
)
export default PrivateRoute;
答案 0 :(得分:3)
在存在问题,因为你是比较ndarray
为true使用strict equality (===
)。 authTokenhas
永远不会严格相等'true'
。
根据the docs,true
将始终返回DOMString
,该值永远不会严格等于true。您应该将令牌转换为布尔值,或者关闭严格检查,并使用0或1 (使用true或false这样的字符串会给您带来麻烦。(请参阅localStorage.getItem
)