lycHub / ysx-library

ysx component libraries
MIT License
19 stars 9 forks source link

在组件用 components 注册 tree 报错。 #1

Closed skyopens closed 2 years ago

skyopens commented 2 years ago

提示它是引用类型。 提示非值

我看不懂 stackblitz 里的 demo 🤧,为啥 script 用 tsx 还可以用 template,还不用声明组件🤧

lycHub commented 2 years ago

demo语法比较新是响应性语法糖那章, 因为用了setup, 所以不用声明组件,不在script里写tsx的话,声明ts和tsx都可以 下面是正常写法:

<template>
  <a-button @click="selectedNode">获取选中节点</a-button>
  <VirTree
    ref="virTree"
    :source="list"
    :default-selected-key="defaultSelectedKey"
  />
</template>

<script lang="tsx">
import { ref, defineComponent } from 'vue';
import { TreeNodeOptions, VirTree, TreeContext } from '@ysx-libs/vue-virtual-tree';

function recursion(path = '0', level = 3, h = 6): TreeNodeOptions[] {
    const list = [];
    for (let i = 0; i < h; i += 1) {
      const nodeKey = `${path}-${i}`;
      const treeNode: TreeNodeOptions  = {
        nodeKey,
        name: nodeKey,
        children: []
      };

      if (level > 0) {
        treeNode.children = recursion(nodeKey, level - 1);
      }
      list.push(treeNode);
    }
    return list;
  }

  export default defineComponent({
    name: 'BaseDemo',
    components: { VirTree },
    setup() {
      const list = ref(recursion());
      const defaultSelectedKey = ref('0-2');

      const virTree = ref<TreeContext>();

      const selectedNode = () => {
        const node = virTree.value!.getSelectedNode();
        console.log('selected node', node);
      }
      return {
        list,
        defaultSelectedKey,
        virTree,
        selectedNode
      }
    }
  });
</script>
skyopens commented 2 years ago

忘了感谢了,补一声感谢。👀👀