diff --git a/src/collapse/collapse-panel.tsx b/src/collapse/collapse-panel.tsx index 98870be892..9f06671aae 100644 --- a/src/collapse/collapse-panel.tsx +++ b/src/collapse/collapse-panel.tsx @@ -18,6 +18,7 @@ export default defineComponent({ const { value, disabled, destroyOnCollapse } = toRefs(props); const collapseValue: Ref = inject('collapseValue'); const updateCollapseValue: Function = inject('updateCollapseValue'); + const getUniqId: Function = inject('getUniqId', () => undefined, false); const { defaultExpandAll, disabled: disableAll, @@ -25,16 +26,17 @@ export default defineComponent({ expandOnRowClick, expandIcon, } = inject('collapseProps'); + const innerValue = value.value || getUniqId(); if (defaultExpandAll.value) { - updateCollapseValue(value.value); + updateCollapseValue(innerValue); } const { beforeEnter, enter, afterEnter, beforeLeave, leave, afterLeave } = useCollapseAnimation(); const headRef = ref(); const isDisabled = computed(() => disabled.value || disableAll.value); const isActive = computed(() => collapseValue.value instanceof Array - ? collapseValue.value.includes(value.value) - : collapseValue.value === value.value, + ? collapseValue.value.includes(innerValue) + : collapseValue.value === innerValue, ); const classes = computed(() => { return [componentName.value, { [disableClass.value]: isDisabled.value }]; @@ -44,7 +46,7 @@ export default defineComponent({ (expandOnRowClick.value && e.target === headRef.value) || (e.target as Element).getAttribute('name') === 'arrow'; if (canExpand && !isDisabled.value) { - updateCollapseValue(value.value); + updateCollapseValue(innerValue); } }; const renderIcon = (direction: string) => { diff --git a/src/collapse/collapse.tsx b/src/collapse/collapse.tsx index fcd096a2fc..e31a6471cb 100644 --- a/src/collapse/collapse.tsx +++ b/src/collapse/collapse.tsx @@ -34,21 +34,16 @@ export default defineComponent({ }, ]; }); + const getUniqId = (() => { + let index = 0; + return () => index++; + })(); provide('collapseValue', collapseValue); provide('updateCollapseValue', updateCollapseValue); provide('collapseProps', toRefs(props)); + provide('getUniqId', getUniqId); return () => { const nodes = renderTNodeJSX('default'); - if (Array.isArray(nodes)) { - nodes.forEach((node, index) => { - const { props, type } = node; - if ((type as any)?.name === 'TCollapsePanel' && props?.value === undefined) { - if (props) { - props.value = index; - } - } - }); - } return
{nodes}
; }; },