From 1e6f67379575646cbe9f4a19a3acff89155f2453 Mon Sep 17 00:00:00 2001 From: discreted66 <953831480@qq.com> Date: Fri, 19 Dec 2025 11:03:05 -0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96tab=E5=86=85=E5=AE=B9=E6=97=A0=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/renderless/src/tabs-mf/vue.ts | 28 ++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/renderless/src/tabs-mf/vue.ts b/packages/renderless/src/tabs-mf/vue.ts index e22d48eb77..99d4717df9 100644 --- a/packages/renderless/src/tabs-mf/vue.ts +++ b/packages/renderless/src/tabs-mf/vue.ts @@ -91,12 +91,32 @@ export const renderless = (props, hooks, { vm, emit, nextTick }) => { (name) => name && api.setActive(name) ) + // 监听 cacheCurrentItem 变化,确保 currentItem 及时更新 + watch( + () => state.cacheCurrentItem, + (newItem) => { + if (newItem && newItem !== state.currentItem) { + state.currentItem = newItem + } + }, + { immediate: true } + ) + onMounted(() => { // 在 vue2 类似 tabSwipe0 这些动态的 ref 只能在 nextTick 中拿到 - nextTick(() => api.observeTabSwipeSize()) - state.currentItem = state.cacheCurrentItem - props.activeName && api.scrollTo(props.activeName) - props.modelValue && api.scrollTo(props.modelValue) + nextTick(() => { + api.observeTabSwipeSize() + // 确保 currentItem 已设置,如果还没有则使用 cacheCurrentItem + if (!state.currentItem && state.cacheCurrentItem) { + state.currentItem = state.cacheCurrentItem + } + // 如果没有 activeName 或 modelValue,且没有选中的 item,则设置第一个 item 为选中 + if (!props.activeName && !props.modelValue && state.items.length > 0 && !state.cacheCurrentItem) { + api.changeCurrentName(state.items[0].name) + } + props.activeName && api.scrollTo(props.activeName) + props.modelValue && api.scrollTo(props.modelValue) + }) }) onBeforeUnmount(() => {