From 8ca8fbd45370774400d680e96002c7f9107bddc5 Mon Sep 17 00:00:00 2001 From: tangjinzhou <415800467@qq.com> Date: Thu, 16 Jul 2020 22:44:00 +0800 Subject: [PATCH] feat: update tree --- antdv-demo | 2 +- components/vc-tree/src/Tree.jsx | 34 ++++++++++------------------- components/vc-tree/src/TreeNode.jsx | 15 ++++--------- components/vc-tree/src/util.js | 4 ++-- examples/App.vue | 2 +- 5 files changed, 19 insertions(+), 38 deletions(-) diff --git a/antdv-demo b/antdv-demo index 59b0f4906..7713f7b97 160000 --- a/antdv-demo +++ b/antdv-demo @@ -1 +1 @@ -Subproject commit 59b0f4906bf50dcd93edfd55ec9ae26ed9578d21 +Subproject commit 7713f7b97f8ce3493094935d5fc1eaaf4ea501aa diff --git a/components/vc-tree/src/Tree.jsx b/components/vc-tree/src/Tree.jsx index c64ddaac0..8c5b1e507 100644 --- a/components/vc-tree/src/Tree.jsx +++ b/components/vc-tree/src/Tree.jsx @@ -27,16 +27,6 @@ import { * other props can pass with context for future refactor. */ -function getWatch(keys = []) { - const watch = {}; - keys.forEach(k => { - watch[k] = function() { - this.needSyncKeys[k] = true; - }; - }); - return watch; -} - const Tree = { name: 'Tree', inheritAttrs: false, @@ -139,18 +129,17 @@ const Tree = { }, watch: { - ...getWatch([ - 'treeData', - 'children', - 'expandedKeys', - 'autoExpandParent', - 'selectedKeys', - 'checkedKeys', - 'loadedKeys', - ]), + // ...getWatch([ + // 'treeData', + // 'children', + // 'expandedKeys', + // 'autoExpandParent', + // 'selectedKeys', + // 'checkedKeys', + // 'loadedKeys', + // ]), __propsSymbol__() { this.setState(this.getDerivedState(getOptionProps(this), this.$data)); - this.needSyncKeys = {}; }, }, @@ -160,9 +149,8 @@ const Tree = { const newState = { _prevProps: { ...props }, }; - const self = this; function needSync(name) { - return (!_prevProps && name in props) || (_prevProps && self.needSyncKeys[name]); + return (!_prevProps && name in props) || (_prevProps && _prevProps[name] !== props[name]); } // ================== Tree Node ================== @@ -671,7 +659,7 @@ const Tree = { style={style} role="tree" unselectable="on" - tabIndex={focusable ? tabIndex : null} + tabindex={focusable ? tabIndex : null} > {mapChildren(treeNode, (node, index) => this.renderTreeNode(node, index))} diff --git a/components/vc-tree/src/TreeNode.jsx b/components/vc-tree/src/TreeNode.jsx index 05421fb05..3e88282b8 100644 --- a/components/vc-tree/src/TreeNode.jsx +++ b/components/vc-tree/src/TreeNode.jsx @@ -1,8 +1,8 @@ -import { inject, provide } from 'vue'; +import { inject, provide, Transition } from 'vue'; import PropTypes from '../../_util/vue-types'; import classNames from 'classnames'; import { getNodeChildren, mapChildren, warnOnlyTreeNode, getDataAndAria } from './util'; -import { initDefaultProps, filterEmpty, getComponent } from '../../_util/props-util'; +import { initDefaultProps, getComponent, getSlot } from '../../_util/props-util'; import BaseMixin from '../../_util/BaseMixin'; import getTransitionProps from '../../_util/getTransitionProps'; @@ -64,10 +64,6 @@ const TreeNode = { vcTreeNode: inject('vcTreeNode', {}), }; }, - inject: { - vcTree: { default: () => ({}) }, - vcTreeNode: { default: () => ({}) }, - }, created() { provide('vcTreeNode', this); }, @@ -245,10 +241,7 @@ const TreeNode = { }, getNodeChildren() { - const { - $slots: { default: children }, - } = this; - const originList = filterEmpty(children); + const originList = getSlot(this); const targetList = getNodeChildren(originList); if (originList.length !== targetList.length) { @@ -523,7 +516,7 @@ const TreeNode = { ); } - return {$children}; + return {$children}; }, }, diff --git a/components/vc-tree/src/util.js b/components/vc-tree/src/util.js index 5ee8dd1e9..133f6060c 100644 --- a/components/vc-tree/src/util.js +++ b/components/vc-tree/src/util.js @@ -1,7 +1,7 @@ /* eslint no-loop-func: 0*/ import warning from 'warning'; import TreeNode from './TreeNode'; -import { getOptionProps } from '../../_util/props-util'; +import { getOptionProps, getSlot } from '../../_util/props-util'; const DRAG_SIDE_RANGE = 0.25; const DRAG_MIN_GAP = 2; @@ -54,7 +54,7 @@ export function isCheckDisabled(node) { export function traverseTreeNodes(treeNodes, callback) { function processNode(node, index, parent) { - const children = node ? node.children?.default() : treeNodes; + const children = node ? getSlot(node) : treeNodes; const pos = node ? getPosition(parent.pos, index) : 0; // Filter children diff --git a/examples/App.vue b/examples/App.vue index 23d1d7dac..b514e5106 100644 --- a/examples/App.vue +++ b/examples/App.vue @@ -4,7 +4,7 @@