@@ -11,7 +11,7 @@ import type {
1111 Tab ,
1212} from './interface' ;
1313import type { CSSProperties , PropType , ExtractPropTypes } from 'vue' ;
14- import { ref , defineComponent , computed , onMounted , watchEffect , camelize } from 'vue' ;
14+ import { defineComponent , computed , onMounted , watchEffect , camelize } from 'vue' ;
1515import { flattenChildren , initDefaultProps , isValidElement } from '../../_util/props-util' ;
1616import useConfigInject from '../../_util/hooks/useConfigInject' ;
1717import useState from '../../_util/hooks/useState' ;
@@ -181,24 +181,19 @@ const InternalTabs = defineComponent({
181181 } ) ;
182182
183183 // ====================== Active Key ======================
184- // use activeKey & mergedActiveKey to control
185- // https://github.com/vueComponent/ant-design-vue/issues/5056
186- const [ activeKey ] = useMergedState < Key > ( ( ) => props . tabs [ 0 ] ?. key , {
184+ const [ mergedActiveKey , setMergedActiveKey ] = useMergedState < Key > ( ( ) => props . tabs [ 0 ] ?. key , {
187185 value : computed ( ( ) => props . activeKey ) ,
188186 defaultValue : props . defaultActiveKey ,
189187 } ) ;
190- const mergedActiveKey = ref < Key > ( ) ;
191188 const [ activeIndex , setActiveIndex ] = useState ( ( ) =>
192189 props . tabs . findIndex ( tab => tab . key === mergedActiveKey . value ) ,
193190 ) ;
194191
195192 watchEffect ( ( ) => {
196- let newActiveIndex = props . tabs . findIndex ( tab => tab . key === activeKey . value ) ;
193+ let newActiveIndex = props . tabs . findIndex ( tab => tab . key === mergedActiveKey . value ) ;
197194 if ( newActiveIndex === - 1 ) {
198195 newActiveIndex = Math . max ( 0 , Math . min ( activeIndex . value , props . tabs . length - 1 ) ) ;
199- mergedActiveKey . value = props . tabs [ newActiveIndex ] ?. key ;
200- } else {
201- mergedActiveKey . value = activeKey . value ;
196+ setMergedActiveKey ( props . tabs [ newActiveIndex ] ?. key ) ;
202197 }
203198 setActiveIndex ( newActiveIndex ) ;
204199 } ) ;
@@ -227,8 +222,8 @@ const InternalTabs = defineComponent({
227222 const onInternalTabClick = ( key : Key , e : MouseEvent | KeyboardEvent ) => {
228223 props . onTabClick ?.( key , e ) ;
229224 const isActiveChanged = key !== mergedActiveKey . value ;
225+ setMergedActiveKey ( key ) ;
230226 if ( isActiveChanged ) {
231- mergedActiveKey . value = key ;
232227 props . onChange ?.( key ) ;
233228 }
234229 } ;
0 commit comments