如果基于Web令牌的React Redirect语句如何修复三元

时间:2019-02-03 01:56:15

标签: reactjs react-router

我正在尝试检查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;

1 个答案:

答案 0 :(得分:3)

在存在问题,因为你是比较ndarray为true使用strict equality (===)authTokenhas永远不会严格相等'true'

根据the docstrue将始终返回DOMString,该值永远不会严格等于true。您应该将令牌转换为布尔值,或者关闭严格检查,并使用0或1 (使用true或false这样的字符串会给您带来麻烦。(请参阅localStorage.getItem