Redux 和 redux saga 从商店中删除值
Redux and redux saga removes values from store
类似这样的问题搜索了一段时间,但没有找到任何内容。
基本上,当用户登录到会话时,从 redux saga 调用设置获取,然后我将这些值放在适当的存储中,但是当我执行另一个甚至不从该 reducer 调用函数的操作时,我神奇地看到了我的物品从那家商店消失,只留下 15 件物品中的 3 件。搜索了整个应用程序,看看我是否在其他地方调用了 setSettings 但没有,只是在 1 个地方(saga)。
截图和代码如下:
the setadditionalinfo is a function from the interface reducer that doesn't even have a saga!
functionality.saga.js
export function* settingsStartProcess() {
try {
const response = yield call(SYSTEMCALLS.fetchSettings)
yield put(setSettings(response.data));
} catch (error) {
yield put(setFetchSettingsFailure(error.message));
}
}
export function* fetchSettingsStart() {
yield takeLatest(
FunctionalityActionTypes.FETCH_SETTINGS_START,
settingsStartProcess
);
}
export function* functionalitySagas() {
yield all([
call(fetchSettingsStart),
]);
}
functionality.reducer.js
const functionalityReducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case FunctionalityActionTypes.SET_SETTINGS:
return {
...state,
isLoading: false,
functions: convertFunctions(action.payload.funzionalita, true),
branches: action.payload.sigleRami
};
case FunctionalityActionTypes.FETCH_SETTINGS_START:
return {
...state,
isLoading: true
};
case FunctionalityActionTypes.FETCH_SETTINGS_FAILURE:
return {
...state,
isLoading: false,
error: action.payload
};
default:
return state;
}
};
想要也添加这个 user.selector 代码,如果它可以干扰状态,但不应该:
export const selectCleanUserBranches = createSelector(
[selectUser, selectFunc],
(user, func) => createCleanDataFromUserSigle(user.currentUser.sigle, func.branches)
);
export const selectTreeDataUserBranches = createSelector(
[selectUser, selectFunc],
(user, func) => convertSigleToTreeData(createCleanDataFromUserSigle(user.currentUser.sigle, func.branches))
);
为遇到相同问题的任何人找到解决方案。
显然我跳过了一个非常重要的部分,其中选择器 return 是参考而不是
一个干净的物体。
因此,将可能会更改选择器的函数包装在 import {produce} from 'immer' 中或在函数调用 Object.assign() 中进行非引用克隆。
类似这样的问题搜索了一段时间,但没有找到任何内容。 基本上,当用户登录到会话时,从 redux saga 调用设置获取,然后我将这些值放在适当的存储中,但是当我执行另一个甚至不从该 reducer 调用函数的操作时,我神奇地看到了我的物品从那家商店消失,只留下 15 件物品中的 3 件。搜索了整个应用程序,看看我是否在其他地方调用了 setSettings 但没有,只是在 1 个地方(saga)。 截图和代码如下: the setadditionalinfo is a function from the interface reducer that doesn't even have a saga!
functionality.saga.js
export function* settingsStartProcess() {
try {
const response = yield call(SYSTEMCALLS.fetchSettings)
yield put(setSettings(response.data));
} catch (error) {
yield put(setFetchSettingsFailure(error.message));
}
}
export function* fetchSettingsStart() {
yield takeLatest(
FunctionalityActionTypes.FETCH_SETTINGS_START,
settingsStartProcess
);
}
export function* functionalitySagas() {
yield all([
call(fetchSettingsStart),
]);
}
functionality.reducer.js
const functionalityReducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case FunctionalityActionTypes.SET_SETTINGS:
return {
...state,
isLoading: false,
functions: convertFunctions(action.payload.funzionalita, true),
branches: action.payload.sigleRami
};
case FunctionalityActionTypes.FETCH_SETTINGS_START:
return {
...state,
isLoading: true
};
case FunctionalityActionTypes.FETCH_SETTINGS_FAILURE:
return {
...state,
isLoading: false,
error: action.payload
};
default:
return state;
}
};
想要也添加这个 user.selector 代码,如果它可以干扰状态,但不应该:
export const selectCleanUserBranches = createSelector(
[selectUser, selectFunc],
(user, func) => createCleanDataFromUserSigle(user.currentUser.sigle, func.branches)
);
export const selectTreeDataUserBranches = createSelector(
[selectUser, selectFunc],
(user, func) => convertSigleToTreeData(createCleanDataFromUserSigle(user.currentUser.sigle, func.branches))
);
为遇到相同问题的任何人找到解决方案。 显然我跳过了一个非常重要的部分,其中选择器 return 是参考而不是 一个干净的物体。 因此,将可能会更改选择器的函数包装在 import {produce} from 'immer' 中或在函数调用 Object.assign() 中进行非引用克隆。