@@ -24,25 +24,21 @@ const {
2424 checkDirty,
2525 shallowPropagate,
2626} = createReactiveSystem ( {
27- update ( signal : Signal | Computed ) : boolean {
28- if ( 'getter' in signal ) {
29- return updateComputed ( signal ) ;
27+ update ( node : Signal | Computed ) : boolean {
28+ if ( node . depsTail !== undefined ) {
29+ return updateComputed ( node as Computed ) ;
3030 } else {
31- return updateSignal ( signal ) ;
31+ return updateSignal ( node as Signal ) ;
3232 }
3333 } ,
3434 notify,
3535 unwatched ( node : Signal | Computed | Effect | EffectScope ) {
36- if ( 'getter' in node ) {
37- if ( node . depsTail !== undefined ) {
38- node . depsTail = undefined ;
39- node . flags = 17 as ReactiveFlags . Mutable | ReactiveFlags . Dirty ;
40- purgeDeps ( node ) ;
41- }
42- } else if ( 'fn' in node ) {
43- effectOper . call ( node ) ;
44- } else if ( ! ( 'currentValue' in node ) ) {
36+ if ( ! ( node . flags & 1 satisfies ReactiveFlags . Mutable ) ) {
4537 effectScopeOper . call ( node ) ;
38+ } else if ( node . depsTail !== undefined ) {
39+ node . depsTail = undefined ;
40+ node . flags = 17 as ReactiveFlags . Mutable | ReactiveFlags . Dirty ;
41+ purgeDeps ( node ) ;
4642 }
4743 } ,
4844} ) ;
@@ -121,7 +117,7 @@ export function computed<T>(getter: (previousValue?: T) => T): () => T {
121117 subsTail : undefined ,
122118 deps : undefined ,
123119 depsTail : undefined ,
124- flags : 0 satisfies ReactiveFlags . None ,
120+ flags : 17 as ReactiveFlags . Mutable | ReactiveFlags . Dirty ,
125121 getter : getter as ( previousValue ?: unknown ) => unknown ,
126122 } ) as ( ) => T ;
127123}
@@ -263,14 +259,6 @@ function computedOper<T>(this: Computed<T>): T {
263259 shallowPropagate ( subs ) ;
264260 }
265261 }
266- } else if ( ! flags ) {
267- this . flags = 1 satisfies ReactiveFlags . Mutable ;
268- const prevSub = setActiveSub ( this ) ;
269- try {
270- this . value = this . getter ( ) ;
271- } finally {
272- activeSub = prevSub ;
273- }
274262 }
275263 const sub = activeSub ;
276264 if ( sub !== undefined ) {
@@ -314,7 +302,6 @@ function signalOper<T>(this: Signal<T>, ...value: [T]): T | void {
314302
315303function effectOper ( this : Effect ) : void {
316304 effectScopeOper . call ( this ) ;
317- this . flags = 0 satisfies ReactiveFlags . None ;
318305}
319306
320307function effectScopeOper ( this : EffectScope ) : void {
@@ -326,12 +313,13 @@ function effectScopeOper(this: EffectScope): void {
326313 if ( sub !== undefined ) {
327314 unlink ( sub ) ;
328315 }
316+ this . flags = 0 satisfies ReactiveFlags . None ;
329317}
330318
331319function purgeDeps ( sub : ReactiveNode ) {
332320 const depsTail = sub . depsTail ;
333- let toRemove = depsTail !== undefined ? depsTail . nextDep : sub . deps ;
334- while ( toRemove !== undefined ) {
335- toRemove = unlink ( toRemove , sub ) ;
321+ let dep = depsTail !== undefined ? depsTail . nextDep : sub . deps ;
322+ while ( dep !== undefined ) {
323+ dep = unlink ( dep , sub ) ;
336324 }
337325}
0 commit comments