在我可以重定向路线之前,先渲染组件。如何减轻渲染效果?

时间:2019-05-09 17:17:31

标签: reactjs react-router-v4

我想通过3个站点进行路由。登录-仪表板-详细信息 详细信息基于仪表板中的数据选择。 如果我刷新url / Details站点,则上下文会丢失,我想重定向到Dashboard,但是在我可以重定向之前,Details会抛出错误。我该如何改变这种行为?

我尝试了以下方法,但均未成功: 1.根据是否存在必要的数据,在Browserrouter中进行重定向,如果不存在则重定向至仪表板 2.在Details componentWillMount()中,我设置了重定向

我是否真的需要检查每个数据使用情况(如果存在数据)?简单路由似乎很麻烦...

这是我的路由配置。第二个重定向不起作用。

            {this.props.token?<Redirect to="/dashboard" />:<Redirect to="/login" />}
            {this.props.selectedCow?<Redirect to="/dashboard"/>:null}
            <Switch>
                <Route path="/login" component={Login} />
                <Route path="/details" component={CowDetails} />
                <Route path="/dashboard" exact component={Dashboard} />
            </Switch> 

错误:未定义数据(在重定向之前呈现了CowDetails,并且缺少上下文)

1 个答案:

答案 0 :(得分:0)

我以错误的方式使用了重定向。按照文档中的说明,它实际上无需渲染组件即可工作。

https://reacttraining.com/react-router/web/api/Redirect

对我来说是

<Route exact path="/details" render={() => (
                    this.props.selectedCow ? (
                      {CowDetails}

                    ) : (
                      <Redirect to="/dashboard"/>
                    )
                  )}/>