Chrome翻译下,React报错为 NotFoundError: Failed to execute 'removeChild' on 'Node'

612 阅读1分钟

在做复杂的国际单页面时,监控发现的一笔错误,多次指向了 FoundError: Failed to execute 'removeChild' on 'Node'

随后经过排查发现,其共性是Chrome翻译。

Chrome翻译,会更改dom结构,给文案父级添加font标签。

react源码翻译前Chrome翻译后
<span>{buttonContent}</span>image.pngimage.png

所以这对react渲染机制是不友好的,因为我们文本内容会有着业务逻辑变化。

在发生变化的时,react渲染就找不到之前文本节点了。

为此我得解决方案是,给父级加个key值<span key={buttonContent} >{buttonContent}</span>

所以当值发生变化时,diff的节点不是文本节点,而是span标签。