File tree 2 files changed +42
-10
lines changed
2 files changed +42
-10
lines changed Original file line number Diff line number Diff line change @@ -170,6 +170,23 @@ describe('reactivity/computed', () => {
170
170
expect ( dummy ) . toBe ( - 1 )
171
171
} )
172
172
173
+ // #5720
174
+ it ( 'should invalidate before non-computed effects' , ( ) => {
175
+ let plusOneValues : number [ ] = [ ]
176
+ const n = ref ( 0 )
177
+ const plusOne = computed ( ( ) => n . value + 1 )
178
+ effect ( ( ) => {
179
+ n . value
180
+ plusOneValues . push ( plusOne . value )
181
+ } )
182
+ // access plusOne, causing it to be non-dirty
183
+ plusOne . value
184
+ // mutate n
185
+ n . value ++
186
+ // on the 2nd run, plusOne.value should have already updated.
187
+ expect ( plusOneValues ) . toMatchObject ( [ 1 , 2 , 2 ] )
188
+ } )
189
+
173
190
it ( 'should warn if trying to set a readonly computed' , ( ) => {
174
191
const n = ref ( 1 )
175
192
const plusOne = computed ( ( ) => n . value + 1 )
Original file line number Diff line number Diff line change @@ -348,16 +348,31 @@ export function triggerEffects(
348
348
debuggerEventExtraInfo ?: DebuggerEventExtraInfo
349
349
) {
350
350
// spread into array for stabilization
351
- for ( const effect of isArray ( dep ) ? dep : [ ...dep ] ) {
352
- if ( effect !== activeEffect || effect . allowRecurse ) {
353
- if ( __DEV__ && effect . onTrigger ) {
354
- effect . onTrigger ( extend ( { effect } , debuggerEventExtraInfo ) )
355
- }
356
- if ( effect . scheduler ) {
357
- effect . scheduler ( )
358
- } else {
359
- effect . run ( )
360
- }
351
+ const effects = isArray ( dep ) ? dep : [ ...dep ]
352
+ for ( const effect of effects ) {
353
+ if ( effect . computed ) {
354
+ triggerEffect ( effect , debuggerEventExtraInfo )
355
+ }
356
+ }
357
+ for ( const effect of effects ) {
358
+ if ( ! effect . computed ) {
359
+ triggerEffect ( effect , debuggerEventExtraInfo )
360
+ }
361
+ }
362
+ }
363
+
364
+ function triggerEffect (
365
+ effect : ReactiveEffect ,
366
+ debuggerEventExtraInfo ?: DebuggerEventExtraInfo
367
+ ) {
368
+ if ( effect !== activeEffect || effect . allowRecurse ) {
369
+ if ( __DEV__ && effect . onTrigger ) {
370
+ effect . onTrigger ( extend ( { effect } , debuggerEventExtraInfo ) )
371
+ }
372
+ if ( effect . scheduler ) {
373
+ effect . scheduler ( )
374
+ } else {
375
+ effect . run ( )
361
376
}
362
377
}
363
378
}
You can’t perform that action at this time.
0 commit comments