@@ -30,6 +30,8 @@ export function resetStore (store, hot) {
30
30
export function resetStoreState ( store , state , hot ) {
31
31
const oldState = store . _state
32
32
const oldScope = store . _scope
33
+ const oldCache = store . _computedCache
34
+ const oldGettersKeySet = new Set ( store . getters ? Object . keys ( store . getters ) : [ ] )
33
35
34
36
// bind store public getters
35
37
store . getters = { }
@@ -45,6 +47,10 @@ export function resetStoreState (store, state, hot) {
45
47
46
48
scope . run ( ( ) => {
47
49
forEachValue ( wrappedGetters , ( fn , key ) => {
50
+ // Filter stale getters' key by comparing oldGetters and wrappedGetters,
51
+ // the key does not be removed from oldGettersKeySet are the key of stale computed cache.
52
+ // Stale computed cache: the computed cache should be removed as the corresponding module is removed.
53
+ oldGettersKeySet . delete ( key )
48
54
// use computed to leverage its lazy-caching mechanism
49
55
// direct inline function use will lead to closure preserving oldState.
50
56
// using partial to return function with only arguments preserved in closure environment.
@@ -64,6 +70,7 @@ export function resetStoreState (store, state, hot) {
64
70
// register the newly created effect scope to the store so that we can
65
71
// dispose the effects when this method runs again in the future.
66
72
store . _scope = scope
73
+ store . _computedCache = computedCache
67
74
68
75
// enable strict mode for new state
69
76
if ( store . strict ) {
@@ -83,8 +90,14 @@ export function resetStoreState (store, state, hot) {
83
90
// dispose previously registered effect scope if there is one.
84
91
if ( oldScope ) {
85
92
const deadEffects = [ ]
93
+ const staleComputedCache = new Set ( )
94
+ oldGettersKeySet . forEach ( ( staleKey ) => {
95
+ staleComputedCache . add ( oldCache [ staleKey ] )
96
+ } )
86
97
oldScope . effects . forEach ( effect => {
87
- if ( effect . deps . length ) {
98
+ // Use the staleComputedCache match the computed property of reactiveEffect,
99
+ // to specify the stale cache
100
+ if ( effect . deps . length && ! staleComputedCache . has ( effect . computed ) ) {
88
101
// Merge the effect that already have dependencies and prevent from being killed.
89
102
scope . effects . push ( effect )
90
103
} else {
0 commit comments