瀏覽代碼

Tree: improve performance (#14881)

ChenZhuoSteve 6 年之前
父節點
當前提交
0e0a506193
共有 4 個文件被更改,包括 12 次插入4 次删除
  1. 2 0
      packages/tree/src/model/node.js
  2. 8 3
      packages/tree/src/model/tree-store.js
  3. 1 1
      packages/tree/src/tree-node.vue
  4. 1 0
      types/tree.d.ts

+ 2 - 0
packages/tree/src/model/node.js

@@ -71,6 +71,7 @@ export default class Node {
     this.expanded = false;
     this.expanded = false;
     this.parent = null;
     this.parent = null;
     this.visible = true;
     this.visible = true;
+    this.isCurrent = false;
 
 
     for (let name in options) {
     for (let name in options) {
       if (options.hasOwnProperty(name)) {
       if (options.hasOwnProperty(name)) {
@@ -123,6 +124,7 @@ export default class Node {
 
 
     if (key && store.currentNodeKey !== undefined && this.key === store.currentNodeKey) {
     if (key && store.currentNodeKey !== undefined && this.key === store.currentNodeKey) {
       store.currentNode = this;
       store.currentNode = this;
+      store.currentNode.isCurrent = true;
     }
     }
 
 
     if (store.lazy) {
     if (store.lazy) {

+ 8 - 3
packages/tree/src/model/tree-store.js

@@ -314,8 +314,13 @@ export default class TreeStore {
     return this.currentNode;
     return this.currentNode;
   }
   }
 
 
-  setCurrentNode(node) {
-    this.currentNode = node;
+  setCurrentNode(currentNode) {
+    const prevCurrentNode = this.currentNode;
+    if (prevCurrentNode) {
+      prevCurrentNode.isCurrent = false;
+    }
+    this.currentNode = currentNode;
+    this.currentNode.isCurrent = true;
   }
   }
 
 
   setUserCurrentNode(node) {
   setUserCurrentNode(node) {
@@ -331,7 +336,7 @@ export default class TreeStore {
     }
     }
     const node = this.getNode(key);
     const node = this.getNode(key);
     if (node) {
     if (node) {
-      this.currentNode = node;
+      this.setCurrentNode(node);
     }
     }
   }
   }
 };
 };

+ 1 - 1
packages/tree/src/tree-node.vue

@@ -6,7 +6,7 @@
     v-show="node.visible"
     v-show="node.visible"
     :class="{
     :class="{
       'is-expanded': expanded,
       'is-expanded': expanded,
-      'is-current': tree.store.currentNode === node,
+      'is-current': node.isCurrent,
       'is-hidden': !node.visible,
       'is-hidden': !node.visible,
       'is-focusable': !node.disabled,
       'is-focusable': !node.disabled,
       'is-checked': !node.disabled && node.checked
       'is-checked': !node.disabled && node.checked

+ 1 - 0
types/tree.d.ts

@@ -36,6 +36,7 @@ export interface TreeNode<K, D> {
   label: string;
   label: string;
   nextSibling: TreeNode<K, D> | null;
   nextSibling: TreeNode<K, D> | null;
   previousSibling: TreeNode<K, D> | null;
   previousSibling: TreeNode<K, D> | null;
+  isCurrent: boolean;
 }
 }
 
 
 /** incomplete, you can convert to any to use other properties */
 /** incomplete, you can convert to any to use other properties */