一个 waline 评论系统bug引发的思考
原文中文,约5700字,阅读约需14分钟。发表于: 。提示 前言: Waline 评论系统这个 bug 有几个月了,现象就是回复完其他人的评论后,评论内容会保留在顶部输入框中,而且不会自动清空。具体见 👉GitHub issuse #2173 许久未见修复,正好我有空,就看看这个问题,接下来跟我一起分析一下这个问题 1. 定位问题 问题现象上边已经描述过了,我们先来定位一下问题。 1.1. 关键 关键在...
Waline评论系统存在一个bug,即回复评论后,评论内容不会自动清空。经过分析发现,评论内容保存在localStorage中。通过查找代码,发现问题出在watch函数中,当提交评论后,editor.value被清空,但watch函数触发时,取到的是旧值。问题可能是由于submitComment是异步函数,导致editor.value=''没有及时更新。进一步调试发现,watch函数被onMounted触发,当顶部的CommentBox.vue组件重新渲染时,watch函数会被触发,此时取到的是旧值。问题可能是useEditor()函数内部有异步操作,导致localStorage没有立即更新。解决方法是使用localStorage.setItem('WALINE_COMMENT_BOX_EDITOR', '')或await nextTick()等待DOM更新完成。