使用ACE编辑器报错 Cannot read property ‘getTokens‘ of null

这里写目录标题

起因

 很久之前测试给我提了个bug,用数组渲染多个ace编辑器,将遍历数组完全更改,会出现编辑器部分内容没有更新。
 等鼠标聚焦到编辑器才显示,我怀疑是key导致了组件更新问题,于是粗暴的把key加上了UUID(一种很难重复出现
 的随机数)。问题迎刃而解,但是真的没问题了吗。

困惑

不久后出现了新的bug,编辑器光标无法找到正确的定位,每次编辑后光标总是定位在末尾。查看打印发现了如上的报错。Cannot read property ‘getTokens’ of null。起初我以为是编辑器本身的问题,花了很多时间在其中找问题,之前改的那个问题并没有给我留下很深的印象,只当是个小bug.(换版本,看文档,看源码。。。)一系列操作后发现问题并没有解决,当我准备休息换换思路,偶然发现了在key上的UUID,一个猜想出现在脑海。

解决方案

我把key换回了原来的数组下标,果然不再报错。但是渲染更新的问题呢?于是我把UUID直接放在reducer中添加,如果数组元素没有uuid属性就添加(初始的state也要添加),然后key绑定uuid.

总结

编辑器报错的原因是每次更新渲染的时候,key都不一样,那么原来的dom和编辑器都会被销毁,生成新的编辑器,之前编辑器里保存的状态如光标位置等状态信息也都没有了,所以才会出现问题。所以使用随机数作为key值真的是个很糟糕的主意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值