更新Redux状态时,saga挂起

时间:2018-06-27 08:09:11

标签: reactjs redux yield redux-saga saga

我在应用程序中使用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的{​​{1}}状态后挂起。

(我使用Redux Dev Tool进行检查,实际上它已将Redux的状态更改为locale,->它实际上完成了'zh',但是,似乎{{1 }}不知道下一步该怎么做)

p / s:挂起2或3分钟后,程序将成功运行,因此它像是传奇故事卡住了,然后在几分钟后继续重试并成功 有任何帮助吗?

0 个答案:

没有答案