最近线上报了js错误,直接取数组第0个元素报错了。
为什么取元素的时候没有判断是否数组里是否有元素?唉~,它上一层其实有判断另外一属性,正常情况下;这个数组为空,它上一层的属性也是为空的,所以就偷懒啦,然后,后端没按常理来,所以就GG了。
来后跟同事讨论的时候,讲到react有个钩子函数:componentDidCatch可以捕获到这种错误!下面就开始入坑啦!!!
首先项目是create-react-app脚手架搭架的,这就是坑的第一步,浪费了我好久的时间(如下)
开发环境无效:我本地开发的时候,模拟一个错误,捕获到了,但是页面显示js错误代码了Fuck!我要的不是这种结果,应该是这个组件显示一个错误提示,其它组件是正常的。(因为我们是聊天页面,玩蛋就全完了,我想让这条出错的信息显示个异常,其它信息正常显示)
解决过程太曲折了,到官网提供的在线demo看是可以的,一应用到我项目来就不行!!!;
一行行的代码校对了,还是不行。好吧,我用脚手架再重样搭建一个
....靠!还是不行!又balalala搞了好久....不知道怎么的头脑一热:直接打包这个demo浏览器访问一下看是否正常=>竟然打包过后是正常的,好吧,估计是环境问题,把start.js的代码改了一下
OK:再到开发环境运行可以了,这就完了吗?并没有,还要试一下事件呀(肯定又是一个坑)
事件无效:
点击多了之后:又报错啦,页面又显示一堆js报错,唉心累。后面去官网查看文档,说事件捕获不到....还是得用trycatch,好吧,我也没有什么好说的了,试了一下trycatch有用,那就这样吧,毕竟官网都这么说了,但是瞬间就感觉这个钩子函数其它没有那么的神奇,毕竟用户事件也是很可能产生报错的。
总结:
1.开发环境:要把预设环境调成成生产环境(不同的环境的域名配置就不能依赖这个判断了)
2.事件产生的报错不能捕获到,所以该用trycatch的时候还是要用trycatch
3.浪费我太久时间了,必须要写个文章发泄一下