React-router-dom v4无法呈现组件

时间:2018-08-07 21:08:52

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

我有一个复杂的问题(我认为是)。我正在使用React-router-dom v4。我想实施私人路线。我有一个登录页面,我在其中调用API进行身份验证,然后在登录页面成功后将应用程序重定向到另一个页面。到现在为止一切正常。当我尝试将应用程序重定向到私有路由下的另一个页面时,问题就开始了。

这是我的NavigationContainer渲染方法(有一个Redux已连接,可以向我提供有关userData状态的数据:

render() {
  const { userData } = this.props

  return(
    <div style={{height: '100%', width: '100%'}}>
      <Switch>
        <Route exact path="/" component={LoginScreen} />
        <PrivateRoute path='/dashboard' authenticated={userData.isLoggedIn} component={PrivateRouteContainer} props={this.state} />
        <Route component={NotFoundPage} />
      </Switch>
    </div>
  )
}

我的PrivateRoute实现看起来像:

const PrivateRoute = ({ component: Component, authenticated, ...rest }) => {
    return(<Route {...rest} render={(props) => authenticated === true 
        ? <Component {...props} />
        : <Redirect to='/' />
    } />)
  }

最后,我的PrivateRouteContainer实现如下:

export default class PrivateRoute extends Component {

onMenuClick = (path) => {
    this.props.history.push('/dashboard' + path)
}

render() {
    return(
        <div>
            <NavigationBar onMenuClick={this.onMenuClick} />

                <Switch>
                    <Route exact path='/dashboard' component={MainPage} />
                    <Route path='/dashboard/loadFile' component={LoadFile} />
                </Switch>
            </div>
        )
    }
}

强制应用重定向到路径的唯一方法:dashboard/loadFile是更改项目中的某些内容并热重新加载它。否则,将无法强制其渲染路线。

有人可以建议我一些吗?我不知道问题出在哪里。

1 个答案:

答案 0 :(得分:2)

我将其发布为答案,因为OP确认了有效性。

使用Redux withRouter时使用connect()来反应路由器documentation suggests

import { withRouter } from 'react-router-dom'
export default withRouter(connect(mapStateToProps)(Something))