我在应用程序中使用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分钟后,程序将成功运行,因此它像是传奇故事卡住了,然后在几分钟后继续重试并成功 有任何帮助吗?