Jodit编辑器代码模式onBlur未触发、useCallback日志无法堆叠问题求助
问题1解答
代码编辑模式下onBlur未触发属于Jodit的功能缺失,并非有意设计的逻辑。
Jodit的富文本编辑模式和代码编辑模式是两套独立的DOM结构:富文本模式的可编辑区域是带contenteditable属性的节点,初始化时会默认绑定blur事件同步到上层onBlur回调;但切换到代码模式时动态生成的textarea输入框,官方默认没有做blur事件的向上同步,因此不会触发你传入的onBlur回调。
你可以手动补全这个能力:在Jodit实例初始化完成后,监听afterOpenCodeEditor事件,拿到代码模式的textarea DOM节点,手动绑定blur事件触发你需要的逻辑即可。
问题2解答
日志无法堆叠是典型的React闭包陷阱问题。
你当前调用setLogs的写法是setLogs([...logs, newLog]),而Jodit的onChange、onBlur回调是在编辑器初始化时仅绑定一次,回调函数捕获的是首次渲染时的logs初始值(空数组)。因此每次触发回调时,都是在空数组的基础上添加一条新日志,自然只会保留最新的一条。
你点击Add按钮时功能正常,是因为按钮的onClick回调会在每次组件重新渲染时生成新的实例,总能捕获到最新的logs状态,所以不会出现这个问题。
修复方法是使用函数式更新写法修改状态:setLogs(prevLogs => [...prevLogs, newLog]),这种写法会直接拿到上一轮的最新状态,不受闭包捕获旧值的影响。
内容的提问来源于stack exchange,提问作者Lin
相关产品推荐
相关产品推荐

