Передавать реквизиты по маршруту с помощью HOC

#reactjs

#reactjs

Вопрос:

У меня есть этот маршрутизатор, любая страница, которая должна иметь макет, обернута withLayout HOC.

Мне нужно передать на некоторые страницы пользовательский контекст, как я могу добавить user реквизит?

 const withLayout = () => Component => props => (
  <div css={pageWrap}>
    <Header user={props.user} />
    <Component {...props} />
  </div>
);

export default function Router() {
  return (
    <AuthConsumer>
      {({ user }) => (
        <Switch>
          <Route exact path="/" component={withLayout()(Home, { user })} />
          <Route exact path="/page1" component={withLayout()(Page1)} />
          <Route exact path="/page2" component={withLayout()(Page2)} />
        </Switch>
      )}
    </AuthConsumer>
  );
}
  

Ответ №1:

Я думаю, у вас проблема с вашим withLayout . Это должно быть:

 const withLayout = () => (Component, props = {}) => (
  <div css={pageWrap}>
    <Header user={props.user} />
    <Component {...props} />
  </div>
);
  

Ответ №2:

Что такое AuthConsumer?

Вы могли бы использовать contextType = AuthContext внутри компонентов вашей страницы. [от]

 class MyClass extends React.Component {
  static contextType = MyContext;
  render() {
    let value = this.context;
    /* render something based on the value */
  }
}
  

Комментарии:

1. AuthConsumer является контекстом для информации пользователя

Ответ №3:

Я смог заставить это работать следующим образом:

 <Route exact path="/" render={props => withLayout()(Home)({ ...props, user })} />