我想创建一个auth HOC,它将重定向用户或显示组件。
即:
const AuthExtender = props => {
if (!props.logged) return <Redirect to="/login" />;
return <WrappedComponent />;
}
const authCompWithState = connect(state=>({logged:state.logged}))(AuthExtender);
我知道这是不对的,但这就是我想要的想法:
const MembersPageForLoggedOnly = memberOnlyPageHOC(MemebersPage);
我尝试了很多版本的返回函数的函数,但是我不能钉住它...
有什么想法吗?
谢谢!
答案 0 :(得分:0)
我所见过的HOC的通常用法是返回一个类:
const authExtender = WrappedComponent => {
return class extends Component {
render() {
if(!this.props.loggedIn) {
return <Redirect to={'/login'} />;
}
return <WrappedComponent {...this.props} />;
}
}
};
然后:
export default authExtender(SomeComponent);
答案 1 :(得分:0)
使用此代码,您可以创建仅具有一个功能的HOC
并将其连接到商店。
const membersOnly = WrappedComponent => {
// render redirect if not logged, else component
const comp = ({ logged, ...props }) => {
return logged ? <Redirect /> : <WrappedComponent {...props} />
}
// connect it to store
return connect(state => ({logged: state.logged}))(comp)
}
// render
const HomePageMembersOnly = membersOnly(HomePage)
您也可以分开编写。
const membersOnly = WrappedComponent => ({ logged, ...props }) => {
return logged ? <Redirect /> : <WrappedComponent {...props} />
}
// use it directly
const MembersOnlyHomePage = connect(state => ({logged: state.logged}))(membersOnly(HomePage))
请记住,始终将未使用的props
传递给您的WrappedComponent
。