Angular 如何删除ngrx中以前的存储状态?

Angular 如何删除ngrx中以前的存储状态?,angular,store,ngrx,Angular,Store,Ngrx,据我所知,存储是一个状态列表,每个状态都可以直接访问其上一个或下一个状态。如果我有大量数据,并且每个状态都太大而无法在每个状态下保存,则此列表将保存在应用程序内存中。如何永久删除旧的存储对象以避免内存积压 此时,我的代码如下所示: export const REDUCERS = { login: loginReducer, register: registerReducer, profile: profileReducer, company: companyRed

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

此时,我的代码如下所示:

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”,但正如我所知,仍然保存了存储的旧状态,其中包含旧数据。我想永久删除它。释放一些内存。

您根本不必这样做。它是由浏览器的垃圾收集器完成的

const initialState = appReducer({}, {})

const rootReducer = (state, action) => {
 if (action.type === 'RESET_STORE') {
   state = initialState
 }
 return appReducer(state, action)
}
只要确保你没有在某个地方提到你以前的状态


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

您根本不必这样做。它是由浏览器的垃圾收集器完成的

只要确保你没有在某个地方提到你以前的状态


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

您对ngrx的理解有点不正确。ngrx实际上并没有保留所有以前的状态。ngrx背后的理念是,如果你做得正确,相同的一组操作和有效负载应该总是产生相同的应用程序状态,从这个意义上说,操作和有效负载的记录是你的应用程序状态在每个时间点的完整历史


你没有必要做你所描述的。如果你有内存问题,你可能是无意中在某个地方造成了泄漏。

你对ngrx的理解有点偏差。ngrx实际上并没有保留所有以前的状态。ngrx背后的理念是,如果你做得正确,相同的一组操作和有效负载应该总是产生相同的应用程序状态,从这个意义上说,操作和有效负载的记录是你的应用程序状态在每个时间点的完整历史


你没有必要做你所描述的。如果您有内存问题,可能是您在某个地方无意中造成了泄漏。

谢谢您的快速回答。但据我所知,这只会重置当前状态,旧数据仍将保存在内存中。我想删除不必要的数据,而不仅仅是重置当前状态。谢谢快速回答。但据我所知,这只会重置当前状态,旧数据仍将保存在内存中。我想删除不必要的数据,而不仅仅是重置当前状态。垃圾收集由web世界中的浏览器处理。作为一名web应用程序开发人员,您的工作是确保您不会执行阻止浏览器进行垃圾收集的操作,例如保留对旧数据的引用,使浏览器无法收集这些数据。在这种情况下,在某些地方,您需要依靠一个框架来为您做到这一点,您需要希望他们做得正确,或者检查代码,如果您认为他们搞糟了,那么找出发生了什么。ngrx相当不错,它们实际上并不持有所有以前的状态,这是对它的错误描述。再次感谢Bryan。你的解释帮助我理解了旧状态是如何保存的。垃圾收集是由网络世界中的浏览器处理的。作为一名web应用程序开发人员,您的工作是确保您不会执行阻止浏览器进行垃圾收集的操作,例如保留对旧数据的引用,使浏览器无法收集这些数据。在这种情况下,在某些地方,您需要依靠一个框架来为您做到这一点,您需要希望他们做得正确,或者检查代码,如果您认为他们搞糟了,那么找出发生了什么。ngrx相当不错,它们实际上并不持有所有以前的状态,这是对它的错误描述。再次感谢Bryan。你的解释帮助我理解了旧州是如何被保存的。非常感谢你明确的回答。这对我帮助很大。非常感谢你明确的回答。这对我帮助很大。