代码之家  ›  专栏  ›  技术社区  ›  Tzook Bar Noy

用connect响应无状态组件

  •  0
  • Tzook Bar Noy  · 技术社区  · 6 年前

    即:

    const AuthExtender = props => {
        if (!props.logged) return <Redirect to="/login" />;
    
        return <WrappedComponent />;
    }
    
    const authCompWithState = connect(state=>({logged:state.logged}))(AuthExtender);
    

    const MembersPageForLoggedOnly = memberOnlyPageHOC(MemebersPage);
    

    我试过很多版本的函数返回函数,但我无法确定…

    2 回复  |  直到 6 年前
        1
  •  0
  •   Luke    6 年前

    使用此代码,可以创建 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 .

        2
  •  0
  •   Anthony    6 年前

    const authExtender = WrappedComponent => {
       return class extends Component {
         render() {
           if(!this.props.loggedIn) {
             return <Redirect to={'/login'} />;
           }
    
           return <WrappedComponent {...this.props} />;
         }
       }
    };
    

    然后:

    export default authExtender(SomeComponent);