@@ -708,6 +708,63 @@ describe('reactivity/computed', () => {
708708 expect ( COMPUTED_SIDE_EFFECT_WARN ) . toHaveBeenWarned ( )
709709 } )
710710
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+
711768 it ( 'debug: onTrigger (ref)' , ( ) => {
712769 let events : DebuggerEvent [ ] = [ ]
713770 const onTrigger = vi . fn ( ( e : DebuggerEvent ) => {
0 commit comments