From 8d752c74b99bbe04e69f698611705d84796319ea Mon Sep 17 00:00:00 2001 From: Travis Date: Wed, 8 Mar 2023 15:13:15 +0800 Subject: [PATCH] fix(components): [select] Filter duplicate emits of "update options" (#11884) * fix(components): [select] Filter duplicate emits of "update options" * perf(components): [select] Code standardization --- packages/components/select/src/options.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/components/select/src/options.ts b/packages/components/select/src/options.ts index 8cbda10c38..047204f7af 100644 --- a/packages/components/select/src/options.ts +++ b/packages/components/select/src/options.ts @@ -6,6 +6,18 @@ export default defineComponent({ name: 'ElOptions', emits: ['update-options'], setup(_, { slots, emit }) { + let cachedOptions: any[] = [] + + function isSameOptions(a: any[], b: any[]) { + if (a.length !== b.length) return false + for (const [index] of a.entries()) { + if (a[index] != b[index]) { + return false + } + } + return true + } + return () => { const children = slots.default?.()! @@ -19,7 +31,10 @@ export default defineComponent({ ) .map((item: VNode) => item.props?.label) - emit('update-options', filteredOptions) + if (!isSameOptions(filteredOptions, cachedOptions)) { + cachedOptions = filteredOptions + emit('update-options', filteredOptions) + } } }