我正在构建一个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)
如果我此时刷新页面,登录页面就可以了。
我在这里缺少什么?
答案 0 :(得分:1)
您需要在路线上的RedirectException
方法中抛出render
,而不是路线组件。
虽然您使用的是发现中继,但目前您需要使用prerender
- 请参阅https://github.com/4Catalyzer/found-relay/blob/v0.3.0-alpha.6/test/modern/prerender.test.js中的示例。