2016-07-14 2 views
2

В уроке видео: https://egghead.io/lessons/javascript-redux-dispatching-actions-asynchronously-with-thunks мы учимся писать свои собственные трюки, чтобы мы могли иметь асинхронный & несколько вызовов отправки в создателе действия. Я это понимаю по большей части.В редуксе при написании thunks для отправки, какая разница между «next» и «store.dispatch»?

Однако, я смущен, почему мы использовали store.dispatch вместо next в стуке:

const thunk = (store) => (next) => (action) => 
    typeof action === 'function' ? 
    action(store.dispatch) : 
    next(action); 

Почему бы один использовать next против store.dispatch и наоборот? Я понимаю, что next переходит к следующему промежуточному программному обеспечению, но если следующее промежуточное программное обеспечение в конечном итоге также вызывает отправку, почему я должен использовать store.dispatch по сравнению с next?

ответ

3

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

Итак, если вы создаете промежуточное программное обеспечение, где хотите выполнить некоторую работу, а затем продолжайте движение по цепочке, используйте next. Например, регистратор делает это: он регистрирует действие, вызывает next, а затем регистрирует полученное состояние. Чтобы вернуть обратный вызов, который пройдет по всей цепочке, верните store.dispatch. Кажется маловероятным, что вы захотите вернуть next из промежуточного программного обеспечения, так как вы, вероятно, предположили бы, что не знаете, какие средние предложения приходят до и после текущего, поэтому результат вызова его за пределами цепи промежуточного программного обеспечения непредсказуем.

Смежные вопросы