В моем универсальном javascript приложении я создал экземпляр axe ios и избыточное хранилище на клиенте и сервере. Я передаю экземпляр ax ios на стороне клиента в хранилище на стороне клиента, а экземпляр ax ios на стороне сервера - в хранилище на стороне сервера.
Поскольку редукторы должны быть «чистыми» (они не изменяйте ничего вне их области действия) мы не можем выполнять какие-либо вызовы API или выполнять действия внутри редуктора. Если вы хотите, чтобы действие что-то сделало, этот код должен находиться внутри функции. Обычно наши действия - это просто простые объекты, мы просто отправляем их непосредственно в редуктор. Redux-thunk - это промежуточное ПО, которое просматривает каждое действие, проходящее через систему, и, если это функция, вызывает эту функцию. Redux передает два аргумента в функции thunk: dispatch , чтобы они могли отправлять новые действия, если это необходимо; и getState , чтобы они могли получить доступ к текущему состоянию. Промежуточное ПО REdux-thunk дает нам возможность создателю действия возвращать функцию вместо объекта действия. Однако extraArgument не определяется с помощью функции thunk.
const thunk = createThunkMiddleware()
Когда я создавал каждую из копий избыточного хранилища, я также создал пользовательский экземпляр ax ios и передал этот пользовательский экземпляр в избыточный thunk в качестве дополнительной трети. аргумент. Затем в наших создателях действий, когда я делаю какой-то сетевой запрос, я получаю настроенную копию ax ios, а не сам модуль. Тогда я могу сделать запрос, не беспокоясь о том, находимся ли мы на клиенте или на сервере. thunk.withExtraArgument
- это промежуточное ПО, в котором определен дополнительный аргумент. Поэтому я использую thunk.withExtraArgument и передаю экземпляры ax ios.