Какой предпочтительный способ использовать connect () из компонента response-redux, Parent vs Child? - PullRequest
0 голосов
/ 31 января 2019

Я немного запутался в эффективном способе использования connect() из реаги-редукса библиотеки.У меня есть компонент удара

class SignUp extends React.Component {
//some functions
render(){
  return (
      <SignUpPageWrapper>
        <SignUpPage>
          <SignUpPageLeft>
            <SignUpLeftText /> //component
          </SignUpPageLeft>
          <SignUpPageRight>
            <SignUpForm /> //component <=
          </SignUpPageRight>
        </SignUpPage>
        <SignUpFooter /> //component
      </SignUpPageWrapper>
  );
 }
}

В приведенном выше коде немногие реагируют Component (// комментируется), а остальные * const из styled-component library.

На данный момент я сделал SignUpForm контейнером, то есть обернут в connect()

class SignUpForm extends React.Component {
  //lots of code here using this.props from connect()

}    
export default connect(
  mapStateToProps,
  mapDispatchToProps
)(SignUpForm);

Но я чувствую, что это не эффективный способ использования connect, тем лучшебыло бы обернуть родительский компонент SignUp в connect, как показано ниже, а затем передать methods и states как props дочерним компонентам.

class SignUp extends React.Component {
    //some functions
    render(){
      return (
          //other components       
          <SignUpPageRight>
            <SignUpForm signupFunc={this.props.signupFunc} />
          </SignUpPageRight>
        </SignUpPage>
        <SignUpFooter /> //component
      </SignUpPageWrapper>
  );
 }
}
export default connect(
  mapStateToProps,
  mapDispatchToProps
)(SignUp);

Что будетчистый, эффективный и хороший способ написать этот код?

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Здесь нет правильного или неправильного ответа, все дело в интерпретации контекста .

Здесь, я думаю, не имеет смысла подключать компонент SignUp к Redux, если единственное, что он собирается сделать, это передать реквизиты вниз к SignUpForm.

* 1008.* А также позвольте мне спросить вас, что произойдет, если вам потребуется визуализировать SignUpForm компонент внутри другого компонента?Что ж, этот компонент также должен быть подключен к Redux и также должен пропускать реквизиты.

Обычно я стараюсь хранить данные хранилища как можно ближе к тому месту, где я собираюсь их использовать, хотя это все еще имеет смысл.

Надеюсь, это поможет!


РЕДАКТИРОВАТЬ

С другой стороны, если вы уверены, что не собираетесь использовать SignUpForm где-либо еще в васприложения, а также вам требуются данные из магазина, кроме тех, которые относятся к SignUpForm, я бы остановился на простом подключении компонента SignUp.

0 голосов
/ 31 января 2019

Если мы пойдем по документации, то на самом деле есть правильный или неправильный ответ.Документация Redux предлагает разделить компоненты на компоненты представления и контейнера.

Реагировать привязки для Redux для отделения компонентов представления от компонентов контейнера.Такой подход может облегчить понимание вашего приложения и упростить повторное использование компонентов. Документация Redux

Ваш компонент SignUpForm является прекрасным примером компонента контейнера, который выполняет функцию связи с хранилищем избыточности.Значения и обработчики отправки должны передаваться через реквизиты в ваши презентационные компоненты.Это делает ваши манипуляции с магазином очень простыми для понимания, поскольку все они содержатся в одном компоненте.

Теперь для повторного использования.Ваш контейнерный компонент должен быть достаточно упорядоченным, чтобы он мог содержать все презентационные компоненты, которые будут манипулировать логическим фрагментом вашего хранилища избыточных данных, но достаточно низким, чтобы вы могли использовать его как можно больше.Таким образом, для формы контейнер должен содержать все входные данные, и вы можете разделить сами входные данные на столько компонентов представления, сколько захотите.Это также позволяет вам повторно использовать ваши презентационные компоненты с другим компонентом Continainer, если вы структурируете их с учетом модульности.

0 голосов
/ 31 января 2019

В соответствии с шаблоном проектирования контейнерных / презентационных компонентов компонент контейнера должен быть осведомлен о состоянии и действиях Redux.Это указано в Redux документах

. Причина этого в том, что у вас будет больше контроля над тем, какие компоненты имеют доступ к вашему состоянию, и ваши данные не будут разбросаны.Так что в вашем случае я бы получал действия для состояний и диспетчеризации внутри компонента <SignUp /> и передавал их как реквизиты для <SignUpForm />.

Личные мысли: Я не думаю, что это имеетчто-нибудь, что связано с эффективностью кода, проще поддерживать, когда ваш код масштабируется

...