You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:03