Могу ли я добавить диспетчеризацию вручную в реквизиты компонента вместо connect ()? - PullRequest
0 голосов
/ 04 июня 2018

Итак, после нескольких часов исследований у меня возникает проблема, почему мои компоненты не получают this.props.dispatch.Предыдущий вопрос: Передать параметры в mapDispatchToProps () .Итак, я нашел источник проблемы, но не знаю, как ее решить.У меня есть вложенные компоненты, созданные рекурсивной функцией.Например:

//App.js render
<Provider>
  </ExampleComponent counter = {6}>
</Provider>

//ExampleComponent.js

createChild = () => {
  const childs = [];
  for (let i = 0; i < this.props.counter; i++){
    childs.push(</ExampleComponent counter = {this.props.counter - 1}>)
  }
  return childs
}

render(){
  return this.createChild()
}

export default connect()(ExampleComponent)

Проблема здесь в том, что только прямой компонент Provider получает dispatch в качестве свойства, даже если все компоненты одинаковы, и вв идеале, они должны быть связаны.Вот картинка, как это выглядит для лучшего понимания: enter image description here

Итак, что будет лучшим решением?Как я могу подключить все компоненты?(только моя личная идея состоит в том, чтобы добавить отправку вручную в качестве опоры для компонентов, каждое решение хорошо, что решает проблему) (и я должен сказать, что я использую Reaction-Beautiful-DDD, который также использует Redux, так что это может привести к конфликтус моим магазином. Я не знаю, это может быть.)

1 Ответ

0 голосов
/ 04 июня 2018

connect принимает 2 аргумента, первый для состояния, второй для отправки.

Причина, по которой вы получаете эту ошибку, заключается в том, что вы игнорируете реквизиты.

const mapStateToProps = (state, ownProps) => {
    // state has access to your store
    // ownProps has access to the props you are passing.
    return {
        ...ownProps,
    };
};

const mapDispatchToProps = (dispatch) => {
    return {
        dispatch: (action) => dispatch(action),
    };
};

export default connect(mapStateToProps, mapDispatchToProps)(ExampleComponent);

Вы также можете импортировать свои действия здесь и создавать функции, которые отправляют ваши действия, используя bind action creator из redux, но я не думаю, что это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...