bindActionCreators¶
1 |
|
Преобразует объект, значениями которого являются генераторы экшенов, в объект с теми же ключами, но генераторами экшенов, обернутыми в вызов dispatch
, т. ч. они могут быть вызваны напрямую.
Как правило, вы просто должны вызвать dispatch
прямо в вашем инстансе Store
. Если вы используете Redux c React, то react-redux предоставит вам dispatch
функцию, т. ч. вы также сможете вызвать его напрямую.
Единственный случай использования для bindActionCreators
- это когда вы хотите передать некоторые генераторы экшенов (action creators) вниз к компоненту, который ничего не знает о Redux и вы не хотите передавать ему dispatch
или Redux стор.
Для удобства, вы также можете передать одну функцию в качестве первого аргумента и получить функцию в ответ.
Параметры¶
actionCreators
(Функция или Объект)- Генератор экшена или объект, значениями которого являются генераторы экшенов.
dispatch
(Функция)dispatch
функция доступная в инстансеStore
.
Возвращает¶
- (Функция или Объект)
- Объект повторяющий исходный объект, но с функциями непосредственно отправляющими экшен (action), возвращаемый соответствующим генератором экшенов. Если вы передаете единственную функцию, как
actionCreators
, возвращаемое значение также будет единственной функцией.
Пример¶
TodoActionCreators.js
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
SomeComponent.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
Советы¶
- Вы можете спросить: почему мы не привязываем генераторы экшенов сразу к инстансу стора, как в классическом Flux? Проблема в том, что это не будет хорошо работать с универсальными приложениями, которые необходимо рендерить на сервере. Скорее всего, вы хотите иметь отдельный инстанс стора для каждого запроса, чтобы вы могли подготовить их с различными данными, но связывание генераторов экшенов во время их определения, означает, что вы привязаны к одному инстансу стора для всех запросов.
- Если вы используете ES5, вместо синтаксиса
import *
вы можете просто передатьrequire('./TodoActionCreators')
вbindActionCreators
в качестве первого аргумента. Единственное, что его волнует, чтобы значения аргументовactionCreators
были функциями. Модульная система не имеет значения.