diff --git a/components/tree/__tests__/__snapshots__/demo.test.js.snap b/components/tree/__tests__/__snapshots__/demo.test.js.snap
index 08104b45d..e811539fd 100644
--- a/components/tree/__tests__/__snapshots__/demo.test.js.snap
+++ b/components/tree/__tests__/__snapshots__/demo.test.js.snap
@@ -304,9 +304,13 @@ exports[`renders ./components/tree/demo/dynamic.vue correctly 1`] = `
exports[`renders ./components/tree/demo/line.vue correctly 1`] = `
showLine:
showIcon:
diff --git a/components/vc-tree/Tree.tsx b/components/vc-tree/Tree.tsx
index 1fceb7bee..0bcfbe5f2 100644
--- a/components/vc-tree/Tree.tsx
+++ b/components/vc-tree/Tree.tsx
@@ -25,11 +25,11 @@ import DropIndicator from './DropIndicator';
import {
computed,
defineComponent,
- onMounted,
onUnmounted,
reactive,
ref,
shallowRef,
+ watch,
watchEffect,
} from 'vue';
import initDefaultProps from '../_util/props-util/initDefaultProps';
@@ -145,34 +145,63 @@ export default defineComponent({
});
let init = false; // 处理 defaultXxxx api, 仅仅首次有效
- onMounted(() => {
- init = true;
- });
-
// ================ expandedKeys =================
- watchEffect(() => {
- let keys = expandedKeys.value;
- // ================ expandedKeys =================
- if (props.expandedKeys !== undefined || (init && props.autoExpandParent)) {
- keys =
- props.autoExpandParent || (!init && props.defaultExpandParent)
- ? conductExpandParent(props.expandedKeys, keyEntities.value)
- : props.expandedKeys;
- } else if (!init && props.defaultExpandAll) {
- const cloneKeyEntities = { ...keyEntities.value };
- delete cloneKeyEntities[MOTION_KEY];
- keys = Object.keys(cloneKeyEntities).map(key => cloneKeyEntities[key].key);
- } else if (!init && props.defaultExpandedKeys) {
- keys =
- props.autoExpandParent || props.defaultExpandParent
- ? conductExpandParent(props.defaultExpandedKeys, keyEntities.value)
- : props.defaultExpandedKeys;
- }
+ // watchEffect(() => {
+ // let keys = expandedKeys.value;
+ // // ================ expandedKeys =================
+ // if (props.expandedKeys !== undefined || (init && props.autoExpandParent)) {
+ // keys =
+ // props.autoExpandParent || (!init && props.defaultExpandParent)
+ // ? conductExpandParent(props.expandedKeys, keyEntities.value)
+ // : props.expandedKeys;
+ // } else if (!init && props.defaultExpandAll) {
+ // const cloneKeyEntities = { ...keyEntities.value };
+ // delete cloneKeyEntities[MOTION_KEY];
+ // keys = Object.keys(cloneKeyEntities).map(key => cloneKeyEntities[key].key);
+ // } else if (!init && props.defaultExpandedKeys) {
+ // keys =
+ // props.autoExpandParent || props.defaultExpandParent
+ // ? conductExpandParent(props.defaultExpandedKeys, keyEntities.value)
+ // : props.defaultExpandedKeys;
+ // }
- if (keys) {
- expandedKeys.value = keys;
- }
- });
+ // if (keys) {
+ // expandedKeys.value = keys;
+ // }
+ // });
+
+ watch(
+ [() => props.expandedKeys, () => props.autoExpandParent, keyEntities],
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ ([_newKeys, newAutoExpandParent], [_oldKeys, oldAutoExpandParent]) => {
+ let keys = expandedKeys.value;
+ // ================ expandedKeys =================
+ if (
+ props.expandedKeys !== undefined ||
+ (init && newAutoExpandParent !== oldAutoExpandParent)
+ ) {
+ keys =
+ props.autoExpandParent || (!init && props.defaultExpandParent)
+ ? conductExpandParent(props.expandedKeys, keyEntities.value)
+ : props.expandedKeys;
+ } else if (!init && props.defaultExpandAll) {
+ const cloneKeyEntities = { ...keyEntities.value };
+ delete cloneKeyEntities[MOTION_KEY];
+ keys = Object.keys(cloneKeyEntities).map(key => cloneKeyEntities[key].key);
+ } else if (!init && props.defaultExpandedKeys) {
+ keys =
+ props.autoExpandParent || props.defaultExpandParent
+ ? conductExpandParent(props.defaultExpandedKeys, keyEntities.value)
+ : props.defaultExpandedKeys;
+ }
+
+ if (keys) {
+ expandedKeys.value = keys;
+ }
+ init = true;
+ },
+ { immediate: true },
+ );
// ================ flattenNodes =================
const flattenNodes = computed(() => {