Skip to content

Commit c1dc8c4

Browse files
committed
fixed the problem. now can use to compare with the previous one
1 parent 424db11 commit c1dc8c4

File tree

3 files changed

+27
-48
lines changed

3 files changed

+27
-48
lines changed

src/reactor.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,15 @@ class Reactor {
208208
})
209209
})
210210

211-
gettersToNotify.forEach((getterId) => {
212-
const getter = this.observerState.get('getters')[getterId];
213-
211+
gettersToNotify.forEach(getter => {
214212
const prevEvaluateResult = fns.evaluate(this.prevReactorState, getter)
215213
const currEvaluateResult = fns.evaluate(this.reactorState, getter)
216214

217215
const prevValue = prevEvaluateResult.result
218216
const currValue = currEvaluateResult.result
219217

220218
if (!Immutable.is(prevValue, currValue)) {
221-
const handlers = this.observerState.getIn(['gettersMap', getterId])
219+
const handlers = this.observerState.getIn(['gettersMap', getter])
222220
.map(observerId => this.observerState.getIn(['observersMap', observerId, 'handler']))
223221
// don't notify here in the case a handler called unobserve on another observer
224222

src/reactor/fns.js

Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -172,40 +172,26 @@ exports.addObserver = function(observerState, getter, handler) {
172172
handler: handler,
173173
})
174174

175-
let updatedObserverState
176-
177-
let existingGetters = observerState.get('getters');
178-
179-
let getterId = existingGetters.indexOf(getter);
180-
181-
if (getterId < 0) {
182-
existingGetters.push(getter);
183-
getterId = existingGetters.length - 1;
184-
}
185-
//update getterMap
186-
187-
let observerIdsForGetter = observerState.getIn(['gettersMap', getterId])
188-
189-
if (!observerIdsForGetter) {
190-
observerIdsForGetter = Immutable.Set([])
191-
}
192-
193-
observerIdsForGetter = observerIdsForGetter.add(currId);
194-
195-
updatedObserverState = observerState.setIn(['gettersMap', getterId], observerIdsForGetter);
175+
let updatedObserverState = observerState.updateIn(['gettersMap', getter]
176+
, observerIds =>
177+
observerIds
178+
? observerIds.add(currId)
179+
: Immutable.Set([]).add(currId)
180+
)
196181

197182
if (storeDeps.size === 0) {
198183
// no storeDeps means the observer is dependent on any of the state changing
199184

200-
updatedObserverState = updatedObserverState.updateIn(['any'], getters => getters.add(getterId))
185+
updatedObserverState = updatedObserverState.updateIn(['any'], getters => getters.add(getter))
201186
} else {
202187
updatedObserverState = updatedObserverState.withMutations(map => {
203188
storeDeps.forEach(storeId => {
204-
let path = ['stores', storeId]
205-
if (!map.hasIn(path)) {
206-
map.setIn(path, Immutable.Set([]))
207-
}
208-
map.updateIn(['stores', storeId], getters => getters.add(getterId))
189+
map.updateIn(['stores', storeId]
190+
, getters =>
191+
getters
192+
? getters.add(getter)
193+
: Immutable.Set([]).add(getter)
194+
)
209195
})
210196
})
211197
}
@@ -267,31 +253,28 @@ exports.removeObserver = function(observerState, getter, handler) {
267253
*/
268254
exports.removeObserverByEntry = function(observerState, entry) {
269255
return observerState.withMutations(map => {
270-
try {
271-
const id = entry.get('id')
272-
const getter = entry.get('getter')
273-
const storeDeps = entry.get('storeDeps')
274-
275-
const existingGetters = observerState.get('getters');
256+
const id = entry.get('id')
257+
const getter = entry.get('getter')
258+
const storeDeps = entry.get('storeDeps')
276259

277-
const getterId = existingGetters.indexOf(getter);
260+
map.updateIn(['gettersMap', getter], observerIds => observerIds.remove(id));
278261

279-
//cleaning the gettersMap
280-
map.updateIn(['gettersMap', getterId], observerIds => observerIds.remove(id));
262+
if (map.getIn(['gettersMap', getter]).size <= 0) {
281263

282-
if (storeDeps.size === 0 && map.getIn(['gettersMap', getterId]).size === 0) {
283-
map.update('any', anyGetters => anyGetters.remove(getterId))
264+
if (storeDeps.size === 0) {
265+
// no storeDeps means the observer is dependent on any of the state changing
266+
map.update('any', getters => getters.remove(getter));
284267
} else {
285268
storeDeps.forEach(storeId => {
286-
map.updateIn(['stores', storeId], getters => getters.remove(getterId))
269+
map.updateIn(['stores', storeId]
270+
, getters => getters.remove(getter) )
287271
})
288272
}
289273

290-
map.removeIn(['observersMap', id])
291-
} catch (e) {
292-
debugger;
293274
}
294275

276+
map.removeIn(['observersMap', id])
277+
295278
})
296279
}
297280

src/reactor/records.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ const ObserverState = Immutable.Record({
1717
// getters registered to specific store changes
1818
stores: Immutable.Map({}),
1919

20-
getters: [],
21-
2220
gettersMap: Immutable.Map({}),
2321

2422
observersMap: Immutable.Map({}),

0 commit comments

Comments
 (0)