持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
前言
兄弟们,好久不见呀~ 最近参与的项目中踩了不少的坑,得赶快总结记录下来,不然以后就都忘了哈哈哈
问题描述
页面用watch监听数据变化,刷新后接口有返回且在控制台打印正常,但是页面上不显示
具体就是这样,这里面分别调了三个接口,它们的处理方式一模一样,离谱的地方就在这:
this.XXX2()对应的数据在页面刷新后时显时不显,另外两个都能正常显示!!!
更离谱的是: 本地服务调试无论怎么刷新都正常显示,服务发布到测试环境刷新就会出现上述问题!!!
解决过程
排查接口是否正常返回以及数据接收是否正确
常用的方法:
- 控制台打印输出
- 跟踪断点 一通操作下来,这个接口和另外两个都是正常的呀!
了解watch监听的机制
这里用到的watch的属性为:
- immediate 设置为true时,可以保证进入页面就执行handler函数;
- handler
这个函数中处理数据;
watch中的方法执行的阶段:
watch正常使用时只有参数改变才会执行方法,页面加载时并不会。当immediate为true,handler中的方法可在页面加载时执行,即此时watch会在created之前执行;
定位到数据渲染出了问题
数据来源、接收及绑定都没问题,就是页面是不显示,所以大概率是渲染的过程出现了问题。正常情况下生命周期是这样的:
数据渲染的阶段在updated周期里,所以考虑强制更新;在获取到数据之后调用:this.$forceUpdate()
总结
修改之后在本地调试没有问题,然后发布到测试环境也没有问题了。但是还是疑惑之前为什么会出现这种问题?有网友说是因为数据层次太多,render函数没有自动更新。可我这个页面只有简单的一层呀?各位如有研究,还请不吝赐教呀!