сага зависает при обновлении состояния редукса - PullRequest
0 голосов
/ 27 июня 2018

Я использовал redux-saga в моем приложении. И используйте saga, чтобы установить состояние моего redux. Но одна вещь, которую я испытываю сейчас, - это зависание приложения, если я использую saga, чтобы обновить redux state с другим значением по сравнению с существующим состоянием

Допустим, в моем redux есть название штата locale. сначала я устанавливаю en и создаю действие CHANGE_LOCALE, чтобы изменить состояние locale на zh позже.

reducer.js

const initialState = fromJS({
  locale: 'en' <- set initial state to en
});

function languageProviderReducer(state = initialState, action) {
  switch (action.type) {
    case CHANGE_LOCALE:
      return state
        .set('locale', action.locale);
    default:
      return state;
  }
}

saga.js

export function* loadProfile() {
  const profileURL = 'profile';
  const profile = yield axios.get(profileURL)
    // .then((res) => (res.data))
    .then((data) => (data.data));

  yield put({
    type: ACTION1,
    payload: profile,
  });
  console.log('finish action one');

  yield put({
    type: CHANGE_LOCALE,
    locale: 'zh', <- change to zh using saga
  });
  console.log('finish action two');

  yield put({
    type: ACTION3,
    payload: profile,
  });
  console.log('finish action three');
}
export default function* defaultSaga() {
  yield takeLatest(constants.LOAD_PROFILE, loadProfile);
}

Поэтому, когда я запускаю приложение, console.log просто показывает finish action one. Это означает, что он зависает после изменения locale состояния Redux.

(я использую Redux Dev Tool для проверки, и он фактически изменил состояние locale на 'zh', -> фактически он завершает action two, однако, похоже, что saga не знает, что делать дальше )

p / s: программа будет успешно работать после зависания в течение 2 или 3 минут, так что она, как сага, застревает, а затем повторяется через несколько минут и завершается успешно Любая помощь, пожалуйста ??

...