项目开发中遇到一个棘手的bug,react前端项目独自运行时一切正常,但是把项目集成到使用wujie的大平台微前端项目中之后,突然有个地方无故报错,导致程序运行停止,后续的方法不再执行。报错如下:
DOMException: Failed to execute 'querySelector' on 'Document': '#13' is not a valid selector.at Object.apply (http://localhost:5173/node_modules/.vite/deps/wujie-vue3.js?v=0186d2fe:3211:137)at new n.fn.init (<anonymous>:3:24217)at n (<anonymous>:3:405)at l (<anonymous>:2:1940588)at HTMLDivElement.drop (<anonymous>:2:1941711)at t.<computed>.<computed>._trigger (<anonymous>:7:11090)at t.<computed>.<computed>._drop (<anonymous>:12:12603)at t.<computed>.<computed>._drop (<anonymous>:7:4499)at t.<computed>.<computed>.<anonymous> (<anonymous>:12:14717)at Function.each (<anonymous>:3:2882) 'error'
报错部分的代码如下
//防止节点id重复 type 节点类型, num 当前顺序号function judgeId(type, num) {let id = type + numlet domstry {doms = $('#' + id)if (doms.length !== 0) {TuoZhuaiFangId = num + 1return judgeId(type, TuoZhuaiFangId)}} catch (error) {console.log(error,"error")}return type + num}
上网查询一大圈之后,发现可能是由于wujie把getElementbyId的方法自动转换成了querySelector而,querySelector方法不允许查找由纯数字组成的id名称,否则就会报错。试了一大堆方法,都无法解决这个报错,最后经过前端组长提醒,可用try catch捕获异常、抛出错误,果然加上try catch后问题解决,报错不再影响后续代码执行。又是血淋淋的教训,研究了半天的问题,加个try catch轻松解决。这个教训提醒我还是经验不足,遇到问题解决思路太过局限!以后遇到问题又多出一条解决思路,那就使用try catch抛出异常!