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

Разве связывание не вызывает эту функцию с диспетчеризацией в качестве входа, а затем присваивает возвращаемое значение реквизиту? поэтому возвращаемое значение должно быть функцией, которая получает идентификатор в качестве ввода и что-то делает.

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

export const mapDispatchToProps = id ={amp}gt; dispatch ={amp}gt; { //eg dispatch an action that deletes that id }; 

Так почему же эта функция правильная?

если вы делаете

 connect(null, mapDispatchToProps)(Component1) 

это не будет работать.

По состоянию на документацию ,

Параметр mapDispatchToProps может иметь две формы. В то время как форма функции позволяет больше настроек, форма объекта проста в использовании.

  • Форма функции: Позволяет больше настроек, получает доступ к отправке и, по желанию, ownProps
  • Сокращенная форма объекта: более декларативная и простая в использовании

Форма функции должна возвращать объект, но ваш mapDispatchToProps возвращает функцию, поэтому она будет игнорироваться.

Я думаю, вы видите эту функцию как создателя действий, когда Redux используется с Redux-thunk. Таким образом, он будет работать, но он должен быть передан как объект prop, как это connect(null, { mapDispatchToProps })(Component1) . Таким образом, он будет доступен для Component1 .

Внутренне connect сделайте следующее

  1. Если вы передали функцию как mapDispatchToProps она будет вызываться с dispatch качестве первого аргумента. И connect ожидает объект как результат, который будет объединен с реквизитом.

    mapDispatchToProps может быть реализован, как mapDispatchToProps ниже

      mapDispatchToProps = dispatch ={amp}gt; ({ changeID (id) { return dispatch ={amp}gt; /* some code */ } }) 

    Компонент получит функцию changeID как опору. И эту функцию можно использовать только с Redux-thunk. Когда компонент вызывает changeID Redux передает его Redux-thunk, который, в свою очередь, вызывает внутреннюю функцию с dispatch предоставленной в качестве первого аргумента.

  2. Если вы передадите объект как mapDispatchToProps все реквизиты этого объекта станут частью компонентов реквизита.

     mapDispatchToProps = { changeID (id) { return dispatch ={amp}gt; /* some code */ } } 

    По сути, он работает так же, как код из пункта 1.

Так что основная идея в том, что любая функция с подписью

 const SomeFunc = id ={amp}gt; dispatch ={amp}gt; { /* code */ } 

может использоваться только с Redux-thunk. Redux-thunk будет вызывать внутреннюю функцию, предоставляя dispatch качестве первого аргумента.

Без Redux-thunk разрешены только следующие создатели действий

 const SomeFunc = id ={amp}gt; ({ type: 'ACTION', id }) 

которые просто создатели действий.