最近在用ant Design框架做项目,业务需求做一个树型的图例,既要满足树形结构,同时需要修改叶子节点,展示不同的图例的颜色,效果如图
最初的写法是使用原生<a-tree-node>,可以实现
基本实现,但问题树形结构是动态的,这里并不知道多少层级,遂这里只能自定义组件递归渲染所有子节点,so
这里组件调用自身,可实现递归效果。
一切都很顺利,但是,第一步就报错了,也就是标题中看到的
意思是说,Tree只能允许自家的TreeNode作为子节点,咱们写的CTreeNode不是亲生的
现在干货来了, 既然写了这边文章,证明问题会得到解决,找到Tree是如何判断下面的子组件是否是亲生的, 以及,如何让自定义组件变成亲生的
从报错信息中查找答案,打开控制台
在TreeNode的getNodeChildren() 方法抛出异常
可以看出_getNodeChildren() 方法获取为空,导致等式不成立抛出异常,那等式为何不成立呢
可以看到,这里children为数组,同时看到了熟悉的c-tree-node。
如果isTreeNode()返回true, filter过滤后,返回值应该不为空,显然,这里的isTreeNode()返回false,继续看 isTreeNode() 方法,这里继续调用了 getSlotOptions(node) 方法,从方法的返回值判断isTreeNode属性,很显然,这里的isTreeNode属性也肯定不为true。那现在看看 getSlotOptions(node) 返回的是什么吧
看到这里,我虎躯一震,这不就是我写的vue吗
说了这么多,大家应该都知道该怎么做了
完结撒花,至于为什么,我也不知道,毕竟我只是个java工程师