@@ -708,6 +708,63 @@ describe('reactivity/computed', () => {
708
708
expect ( COMPUTED_SIDE_EFFECT_WARN ) . toHaveBeenWarned ( )
709
709
} )
710
710
711
+ it ( 'should chained computeds keep reactivity when computed effect happens' , async ( ) => {
712
+ const v = ref ( 'Hello' )
713
+ const c = computed ( ( ) => {
714
+ v . value += ' World'
715
+ return v . value
716
+ } )
717
+ const d = computed ( ( ) => c . value )
718
+ const e = computed ( ( ) => d . value )
719
+ const Comp = {
720
+ setup : ( ) => {
721
+ return ( ) => d . value + ' | ' + e . value
722
+ } ,
723
+ }
724
+ const root = nodeOps . createElement ( 'div' )
725
+
726
+ render ( h ( Comp ) , root )
727
+ await nextTick ( )
728
+ expect ( serializeInner ( root ) ) . toBe ( 'Hello World | Hello World' )
729
+
730
+ v . value += ' World'
731
+ await nextTick ( )
732
+ expect ( serializeInner ( root ) ) . toBe (
733
+ 'Hello World World World | Hello World World World' ,
734
+ )
735
+ expect ( COMPUTED_SIDE_EFFECT_WARN ) . toHaveBeenWarned ( )
736
+ } )
737
+
738
+ it ( 'should keep dirty level when side effect computed value changed' , ( ) => {
739
+ const v = ref ( 0 )
740
+ const c = computed ( ( ) => {
741
+ v . value += 1
742
+ return v . value
743
+ } )
744
+ const d = computed ( ( ) => {
745
+ return { d : c . value }
746
+ } )
747
+
748
+ const Comp = {
749
+ setup : ( ) => {
750
+ return ( ) => {
751
+ return [ d . value . d , d . value . d ]
752
+ }
753
+ } ,
754
+ }
755
+
756
+ const root = nodeOps . createElement ( 'div' )
757
+ render ( h ( Comp ) , root )
758
+
759
+ expect ( d . value . d ) . toBe ( 1 )
760
+ expect ( serializeInner ( root ) ) . toBe ( '11' )
761
+ expect ( c . effect . _dirtyLevel ) . toBe (
762
+ DirtyLevels . MaybeDirty_ComputedSideEffect_Origin ,
763
+ )
764
+ expect ( d . effect . _dirtyLevel ) . toBe ( DirtyLevels . MaybeDirty_ComputedSideEffect )
765
+ expect ( COMPUTED_SIDE_EFFECT_WARN ) . toHaveBeenWarned ( )
766
+ } )
767
+
711
768
it ( 'debug: onTrigger (ref)' , ( ) => {
712
769
let events : DebuggerEvent [ ] = [ ]
713
770
const onTrigger = vi . fn ( ( e : DebuggerEvent ) => {
0 commit comments