如何在ngrx中删除以前的商店状态?

时间:2017-10-27 10:31:12

标签: angular store ngrx

据我所知,商店是一个州名单,每个州都可以直接访问他的上一个或下一个州。如果我有大量数据且每个状态都太大而无法保存在每个状态,则此列表将保存在应用程序内存中。如何永久删除旧的商店对象以避免内存过多?

此时我的代码如下所示:

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',但是,据我所知,仍然保存了包含旧数据的旧商店状态。我想永久删除它。释放一些记忆。

3 个答案:

答案 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)

你根本不需要这样做。它由浏览器的垃圾收集器完成。

请确保您没有在某处提及您以前的状态。

例如,如果您创建一个将每个先前状态推送到数组中的中间件,它们将永远不会被清除,并且您的内存消耗将随着时间的推移而增加而不会降低。