@@ -11,7 +11,7 @@ import type {
11
11
Tab ,
12
12
} from './interface' ;
13
13
import 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' ;
15
15
import { flattenChildren , initDefaultProps , isValidElement } from '../../_util/props-util' ;
16
16
import useConfigInject from '../../_util/hooks/useConfigInject' ;
17
17
import useState from '../../_util/hooks/useState' ;
@@ -181,24 +181,19 @@ const InternalTabs = defineComponent({
181
181
} ) ;
182
182
183
183
// ====================== 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 , {
187
185
value : computed ( ( ) => props . activeKey ) ,
188
186
defaultValue : props . defaultActiveKey ,
189
187
} ) ;
190
- const mergedActiveKey = ref < Key > ( ) ;
191
188
const [ activeIndex , setActiveIndex ] = useState ( ( ) =>
192
189
props . tabs . findIndex ( tab => tab . key === mergedActiveKey . value ) ,
193
190
) ;
194
191
195
192
watchEffect ( ( ) => {
196
- let newActiveIndex = props . tabs . findIndex ( tab => tab . key === activeKey . value ) ;
193
+ let newActiveIndex = props . tabs . findIndex ( tab => tab . key === mergedActiveKey . value ) ;
197
194
if ( newActiveIndex === - 1 ) {
198
195
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 ) ;
202
197
}
203
198
setActiveIndex ( newActiveIndex ) ;
204
199
} ) ;
@@ -227,8 +222,8 @@ const InternalTabs = defineComponent({
227
222
const onInternalTabClick = ( key : Key , e : MouseEvent | KeyboardEvent ) => {
228
223
props . onTabClick ?.( key , e ) ;
229
224
const isActiveChanged = key !== mergedActiveKey . value ;
225
+ setMergedActiveKey ( key ) ;
230
226
if ( isActiveChanged ) {
231
- mergedActiveKey . value = key ;
232
227
props . onChange ?.( key ) ;
233
228
}
234
229
} ;
0 commit comments