使用Found路由器和React进行自定义重定向

时间:2017-08-23 14:53:10

标签: javascript reactjs

我正在构建一个React应用并使用Found作为路由器。

docs描述了一种进行自定义重定向的技术。

以下是我尝试完成的代码示例:

class App extends React.Component {
  render() {
    const { viewer, children } = this.props;

    if (viewer === null && this.props.location.pathname != "/login") {
      throw new RedirectException({ action: "PUSH", pathname: "/login" });
    }

    return (
      <div>
        {children}
      </div>
    );
  }
}

基本上我只想在没有用户的情况下重定向到登录页面。当我这样做时,地址栏正确更新为/login,但我在控制台中看到错误 -

Uncaught (in promise) TypeError: Cannot read property '_currentElement' of null
    at ReactCompositeComponentWrapper._updateRenderedComponent (ReactCompositeComponent.js?d2b3:744)
    at ReactCompositeComponentWrapper._performComponentUpdate (ReactCompositeComponent.js?d2b3:723)
    at ReactCompositeComponentWrapper.updateComponent (ReactCompositeComponent.js?d2b3:644)
    at ReactCompositeComponentWrapper.receiveComponent (ReactCompositeComponent.js?d2b3:546)
    at Object.receiveComponent (ReactReconciler.js?399b:124)
    at ReactCompositeComponentWrapper._updateRenderedComponent (ReactCompositeComponent.js?d2b3:753)
    at ReactCompositeComponentWrapper._performComponentUpdate (ReactCompositeComponent.js?d2b3:723)
    at ReactCompositeComponentWrapper.updateComponent (ReactCompositeComponent.js?d2b3:644)
    at ReactCompositeComponentWrapper.receiveComponent (ReactCompositeComponent.js?d2b3:546)
    at Object.receiveComponent (ReactReconciler.js?399b:124)

如果我此时刷新页面,登录页面就可以了。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您需要在路线上的RedirectException方法中抛出render,而不是路线组件。

虽然您使用的是发现中继,但目前您需要使用prerender - 请参阅https://github.com/4Catalyzer/found-relay/blob/v0.3.0-alpha.6/test/modern/prerender.test.js中的示例。