据我所知,商店是一个州名单,每个州都可以直接访问他的上一个或下一个州。如果我有大量数据且每个状态都太大而无法保存在每个状态,则此列表将保存在应用程序内存中。如何永久删除旧的商店对象以避免内存过多?
此时我的代码如下所示:
export const REDUCERS = {
login: loginReducer,
register: registerReducer,
profile: profileReducer,
company: companyReducer,
balance: balanceReducer
}
const SdkReducer = compose(storeLogger(), combineReducers)(REDUCERS);
export function reducer(state: any, action: any) {
if(action.type === 'RESET_STORE'){
return undefined;
}
return SdkReducer(state, action);
}
当' RESET_STORE'被称为root reducer返回' udefined',但是,据我所知,仍然保存了包含旧数据的旧商店状态。我想永久删除它。释放一些记忆。
答案 0 :(得分:1)
const initialState = appReducer({}, {})
const rootReducer = (state, action) => {
if (action.type === 'RESET_STORE') {
state = initialState
}
return appReducer(state, action)
}
答案 1 :(得分:1)
您对ngrx的理解有点偏差。 ngrx实际上并没有保留所有以前的状态。 ngrx背后的想法是,如果你做得对,同一组动作和有效负载应始终产生相同的应用程序状态,从这个意义上讲,动作和有效负载的记录是每个时间点应用程序状态的完整历史记录。
你没有必要做你所描述的。如果你遇到了内存问题,你可能会在某个地方出现泄漏。
答案 2 :(得分:0)
你根本不需要这样做。它由浏览器的垃圾收集器完成。
请确保您没有在某处提及您以前的状态。
例如,如果您创建一个将每个先前状态推送到数组中的中间件,它们将永远不会被清除,并且您的内存消耗将随着时间的推移而增加而不会降低。