From 7125d84fa2ab76478a1bb2aa4af6da9b18666d3f Mon Sep 17 00:00:00 2001 From: tanjinzhou <415800467@qq.com> Date: Thu, 5 Nov 2020 18:09:02 +0800 Subject: [PATCH] perf: optimize select animate --- antdv-demo | 2 +- components/vc-select/OptionList.tsx | 27 +++++++++------------------ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/antdv-demo b/antdv-demo index bef135d01..7f7141a1d 160000 --- a/antdv-demo +++ b/antdv-demo @@ -1 +1 @@ -Subproject commit bef135d01e96fadf80f7a09c7cd26b18aa6d71d8 +Subproject commit 7f7141a1dd62488287157dee6a1af52716924c62 diff --git a/components/vc-select/OptionList.tsx b/components/vc-select/OptionList.tsx index 40c437cca..26235cb1d 100644 --- a/components/vc-select/OptionList.tsx +++ b/components/vc-select/OptionList.tsx @@ -135,32 +135,23 @@ const OptionList = defineComponent({ ); // Auto scroll to item position in single mode - let timeoutId: number; watch( computed(() => props.open), () => { - /** - * React will skip `onChange` when component update. - * `setActive` function will call root accessibility state update which makes re-render. - * So we need to delay to let Input component trigger onChange first. - */ - clearTimeout(timeoutId); - timeoutId = setTimeout(() => { - if (!props.multiple && props.open && props.values.size === 1) { - const value = Array.from(props.values)[0]; - const index = props.flattenOptions.findIndex(({ data }) => data.value === value); - setActive(index); - scrollIntoView(index); - } - }); + if (!props.multiple && props.open && props.values.size === 1) { + const value = Array.from(props.values)[0]; + const index = props.flattenOptions.findIndex(({ data }) => data.value === value); + // setActive(index); + scrollIntoView(index); + } // Force trigger scrollbar visible when open if (props.open) { - nextTick(()=>{ + nextTick(() => { listRef.current?.scrollTo(undefined); - }) + }); } }, - { immediate: true }, + { immediate: true, flush: 'post' }, ); // ========================== Values ==========================