React-router v4:条件表达式未正确执行

时间:2017-06-13 19:11:57

标签: reactjs react-router react-router-v4 react-router-dom

操作系统:Windows 10 Pro
React-router:4.1.1
反应:15.5.4

因此,我正在<Route />进行条件检查以确定是否存在authToken,以及是否不将用户重定向到登录,否则呈现关联的组件。但即使令牌存在,如图中所示,如果您对根//view/:postId进行页面重新加载,用户仍会被重定向到登录页面。

我在这里怎么样?

app.js

  render () {
    const SOME_PATH = window.location.pathname;

    return (
      <ApolloProvider store={store} client={client}>
        <Router history={history}>
          <Route path={SOME_PATH} component={App}/>
        </Router>
      </ApolloProvider>
    )
  }

App.js

export default compose(
  allPostsCommentsQuery,
  connect(mapStateToProps, mapDispatchToProps)
)(Main);

Main.js

  render () {
    const auth = this.props.auth.token;
    console.log('auth = ', auth);
    return (
      <div>
        <h1>
          <Link to="/">Flamingo City</Link>
        </h1>
        <Switch>
          <Route path={`${this.props.match.url}`} exact render={(props) => (
            !auth ? <Redirect to="/login"/> : <PhotoGrid {...this.props} {...props} />
          )} />
          <Route path={`${this.props.match.url}view/:postId`} render={(props) => (
            !auth ? <Redirect to="/login"/> : <Single {...this.props} {...props} />
          )} />
          <Route path={`${this.props.match.url}login`} render={(props) => (
            <LoginUser {...this.props} {...props} />
          )} />
        </Switch>
      </div>
    );
  }

enter image description here

1 个答案:

答案 0 :(得分:1)

按如下方式重构代码解决了问题:

!auth ? (<Redirect to="/login"/>) : (<PhotoGrid {...this.props} {...props} />)