From a61ec0a7c93ad3c1c2aeff1c22f2567dda9852ab Mon Sep 17 00:00:00 2001 From: tangjinzhou <415800467@qq.com> Date: Fri, 11 Mar 2022 16:04:39 +0800 Subject: [PATCH] perf: collapse tree --- components/vc-tree/MotionTreeNode.tsx | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/components/vc-tree/MotionTreeNode.tsx b/components/vc-tree/MotionTreeNode.tsx index a67019fb6..ca7033cbd 100644 --- a/components/vc-tree/MotionTreeNode.tsx +++ b/components/vc-tree/MotionTreeNode.tsx @@ -11,12 +11,11 @@ import { onBeforeUnmount, onMounted, ref, - shallowRef, Transition, watch, } from 'vue'; import { treeNodeProps } from './props'; -import { collapseMotion } from '../_util/transition'; +import collapseMotion from '../_util/collapseMotion'; export default defineComponent({ name: 'MotionTreeNode', @@ -36,20 +35,18 @@ export default defineComponent({ const visible = ref(true); const context = useInjectTreeContext(); const motionedRef = ref(false); - const transitionClass = ref(''); - const transitionStyle = shallowRef({}); const transitionProps = computed(() => { if (props.motion) { return props.motion; } else { - return collapseMotion(undefined, transitionStyle, transitionClass); + return collapseMotion(); } }); - const onMotionEnd = (type?: 'appear' | 'leave') => { + const onMotionEnd = (node?: HTMLDivElement, type?: 'appear' | 'leave') => { if (type === 'appear') { - transitionProps.value?.onAfterAppear?.(); + transitionProps.value?.onAfterEnter?.(node); } else if (type === 'leave') { - transitionProps.value?.onAfterLeave?.(); + transitionProps.value?.onAfterLeave?.(node); } if (!motionedRef.value) { props.onMotionEnd(); @@ -83,14 +80,10 @@ export default defineComponent({ onMotionEnd('appear')} - onAfterLeave={() => onMotionEnd('leave')} + onAfterAppear={(node: HTMLDivElement) => onMotionEnd(node, 'appear')} + onAfterLeave={(node: HTMLDivElement) => onMotionEnd(node, 'leave')} > -
+
{motionNodes.map((treeNode: FlattenNode) => { const { data: { ...restProps },