tsx+vue+elementui bug数据已更新,但<el-form-item>界面不更新

338 阅读1分钟

问题: 前几天碰到的离谱Bug,用组件展示一组从后台获取的数据,数据更新后,在返回的函数内打印显示数据已经更新了。但界面始终不更新

数据获取代码如下

```    //加载知识点数据表
    public async changeKnowledgeTable(){
 
        await this.getKnowledgeData(this.courseId).then((res:any) => {
   
            this.knowledgeList = Array.from(res.data)
            this.rowNum=this.knowledgeList.length;
           
        }) 

看了网上的一些分析,总的来说检测不到数据更新的解决方案有如下

  1. 修改数组更新的方式。比如我这种写法Array.from(res.data)可能是检测不到的,按照网上给出的说法,用Vue.set更新数组可以检测得到。这种方法尝试了失败。
  2. 使用 this.$forceUpdate() 强制更新。我用这个函数强制更新了组件,子组件,无效。
  3. 看到有人和我一样 使用this.$forceUpdate()也无法解决问题的,人家说在上加了一个keys属性,数据更新修改key的值,此时能检测到数据更新。我尝试了一下, key={this.formDataStatus}且在@watch装饰器中监听数据变化,数据变化则改变key的值(由true->false,false->true)
  4. 还试了一些其他方法记不清了,都不行,无法理解。然后某一瞬间突然开窍了,突然想到可能不是无法检测到数据更新,而是它外面的无法检测到。于是在我这个form外面的div上试了方法三,问题解决了。