11import type { Key } from '../../../_util/type' ;
22import type { ComputedRef , CSSProperties , InjectionKey , PropType , Ref , UnwrapRef } from 'vue' ;
3- import { toRef } from 'vue' ;
4- import { watchEffect } from 'vue' ;
5- import { defineComponent , inject , provide } from 'vue' ;
3+ import { defineComponent , inject , provide , toRef } from 'vue' ;
64import type {
75 BuiltinPlacements ,
86 MenuClickEventHandler ,
@@ -21,7 +19,7 @@ export interface StoreMenuInfo {
2119 parentKeys : ComputedRef < Key [ ] > ;
2220}
2321export interface MenuContextProps {
24- isRootMenu : boolean ;
22+ isRootMenu : Ref < boolean > ;
2523
2624 store : Ref < Record < string , UnwrapRef < StoreMenuInfo > > > ;
2725 registerMenuInfo : ( key : string , info : StoreMenuInfo ) => void ;
@@ -115,17 +113,17 @@ const MenuContextProvider = defineComponent({
115113 setup ( props , { slots } ) {
116114 const menuContext = useInjectMenu ( ) ;
117115 const newContext = { ...menuContext } ;
118- watchEffect ( ( ) => {
119- if ( props . mode !== undefined ) {
120- newContext . mode = toRef ( props , 'mode' ) ;
121- }
122- if ( props . isRootMenu !== undefined ) {
123- newContext . isRootMenu = props . isRootMenu ;
124- }
125- if ( props . overflowDisabled !== undefined ) {
126- newContext . overflowDisabled = toRef ( props , 'overflowDisabled' ) ;
127- }
128- } ) ;
116+ // 确保传入的属性不会动态增删
117+ // 不需要 watch 变化
118+ if ( props . mode !== undefined ) {
119+ newContext . mode = toRef ( props , 'mode' ) ;
120+ }
121+ if ( props . isRootMenu !== undefined ) {
122+ newContext . isRootMenu = toRef ( props , 'isRootMenu' ) ;
123+ }
124+ if ( props . overflowDisabled !== undefined ) {
125+ newContext . overflowDisabled = toRef ( props , 'overflowDisabled' ) ;
126+ }
129127 useProvideMenu ( newContext ) ;
130128 return ( ) => slots . default ?.( ) ;
131129 } ,
0 commit comments