【发布时间】:2018-05-23 07:58:41
【问题描述】:
所以我最近一直在阅读 HOC,并决定在我的应用程序中使用它们来将授权逻辑传递给子组件。
我正在尝试通过 HOC 渲染 <Route /> 组件,但它记录了错误:
未捕获的错误:AuthRoute(...):必须返回有效的 React 元素(或 null)。您可能返回了未定义、数组或其他一些无效对象。
这是 HOC 的代码:
const AuthRoute = ({ component: Component }) => {
class AuthComponent extends Component {
// Authorisation logic here
render() {
return (
<Route render={props => <Component {...props}/>} />
)
}
}
return AuthComponent;
};
然后我使用这个 HOC 作为 <Route /> 组件的别名,如下所示:
<BrowserRouter>
<AuthRoute path="/account" component={PrivateComponent} />
</BrowserRouter>
编辑:
但这种方法效果很好:
const AuthRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
checkAuth() ? (<Component {...props}/>) : (<Redirect to={{pathname: '/', state: { from: props.location }}}/>)
)}/>
);
<BrowserRouter>
<AuthRoute path="/account" component={PrivateComponent} />
</BrowserRouter>
【问题讨论】:
标签: reactjs react-router higher-order-components