在做分类模块的动态展示文章列表功能时出现了无限调用的问题
简单描述下这个功能: 我要做一个文章分类的展示界面,分类是可以无限嵌套的,
出于页面美观,我的一个需求:假如一个分类下有子分类,那就在下一级中全部显示子分类;假如一个分类下没有子分类了,就在下一级全部显示该分类的所有文章。
对树形无限嵌套结构的动态渲染我的一般做法是:
1、父组件v-for遍历数据源,动态生成最外层的伸缩面板,并在内部调用子组件,向子组件发送当前数据的children数组(假如有该分类有子分类的前提下)
2、子组件prop接收父组件传来数组,v-for遍历数组并进行渲染,假如当前分类有children数据,递归调用当前组件,传children数据过去;
上面的一切都按着我的预期显示也没有问题,问题出在下面:
假如当前分类没有children数据,我需要拿到当前分类下的所有文章列表,这里我去调用了另外写的方法去通过接口返拿到数组,并遍历这个数组
这里贴一下子组件代码:
尝试一:在一开始时这个方法我写的是内部定义变量 接口访问数据后赋值给变量并返回
结果:接口请求成功并返回了数据,list变量打印出来也有值,但是页面上死活渲染不出任何文章
尝试二:后来想到vue是数据驱动的,这个数据得在data里定义好变量,所以我把数据赋值给了data里定义的变量
结果:和之前一样,接口请求成功并返回了数据,list变量打印出来也有值,但是页面上死活渲染不出任何文章
尝试三:把异步等待的async和await去掉
结果:页面上渲染出了数据,但是无限调用了这个方法,可以看到一直在发送请求
我猜测原因可能是 双向绑定 多次调用接口导致这个绑定的变量的值不断被改变,改变后由于数据驱动,页面也跟着渲染,渲染时又调用了方法导致值改变....形成了一个无限调用