вызов действия приставки - PullRequest
0 голосов
/ 13 сентября 2018

Сначала я хочу вызвать действие CLICK_SEARCH, чтобы получить ответ от сервера, а затем передать ответ CLICK_SEARCH2, чтобы обновить хранилище.

Но при сбое консольный результат показывает CLICK_SEARCH'вместо' CLICK_SEARCH2 'и action.payload не определено.Кто-нибудь поможет?спасибо

 function reducreForSeach(state = initialState3, action) {
      if (typeof state === 'undefined') {
        return 0
      }

      switch(action.type) {
          case 'CLICK_SEARCH': {

            axios.post('abc/url', {
                responseType: 'document',
                headers: { 'X-Requested-With': 'XMLHttpRequest'},})
                .then(function(response) {

                 dispatch({
                 type:  'CLICK_SEARCH2',
                 payload: response.data});

          } 



          case 'CLICK_SEARCH2': {
           console.log(action.type);
           console.log(action.payload);
           }
        }

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

dispatch никогда не определяется или не передается в функцию reducreForSeach, поэтому он всегда не сможет вызвать CLICK_SEARCH2.

Действия цепочки напрямую не поддерживаются Redux. Вы можете реализовать это самостоятельно, но я предлагаю вам взглянуть на популярные библиотеки, такие как redux-thunk или redux-saga , чтобы узнать, как вызывать действия, основанные на результате других действий. Все они хорошо документированы и рекомендованы на официальном сайте Redux

0 голосов
/ 13 сентября 2018

Вы не хотите делать такие вещи в редукторах, поскольку они должны быть чистыми функциями.

Вы можете отправлять другие действия из генераторов действий, используя redux-thunk, что позволяет вам возвращать функцию из ваших генераторов действий.

Функция, которую вы возвращаете, будет вызываться с dispatch в качестве реквизита и позволяет вам выполнять дальнейшие действия по отправке из обратного вызова.

например,

export const mySearchActionGenerator = keyword => dispatch => {
    dispatch ({
       type: actionTypes.MY_SEARCH_ACTION
       keyword
    });
    dispatch ({
       type: actionTypes.MY_SEARCH_ACTION
       keyword
    });
}

Другойопция будет использовать redux-saga, что позволяет гораздо более сложные настройки.

0 голосов
/ 13 сентября 2018

Вы пробовали объявлять константы для типов действий? Просто, как этот:

const CLICK_SEARCH = 'CLICK_SEARCH';
const CLICK_SEARCH2 = 'CLICK_SEARCH2';

function reducreForSeach(state = initialState3, action) {
   //...other parts of the code
   switch(action.type) {
      case CLICK_SEARCH: {

         //...

         dispatch({ type: CLICK_SEARCH2,

      //...

      case CLICK_SEARCH2: {

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