tinymce变化后onchange光标变化问题(React)

2023-11-08

关于tinymce富文内容变化后,光标会自动跳到最前面的问题。比如回车、复制粘贴,都会跳到最前面。

由于我是ant design pro包了一层,它给分配的value和onchange,不用的话,确实也不会有这问题,但那样form提交表单时,虽然编辑器里已经变化,但获取不到变化值。

于是我开始搜这问题的解决方式,很多人都是直接定位到最尾部,用:

editor.selection.select(editor.getBody(),true);
editor.selection.collapse(false);

但这样的体验很不好,于是我又找到一个方法,让它定位到最后编辑的位置:

<Editor
      tinymceScriptSrc="/tinymce/tinymce.min.js" //tinymce主要文件js入口
      inline={false}
      initialValue={value}
      onChange={(e) => {
        const target = e.target;
        // 获取光标最后的位置
        const p = target.selection.getBookmark(2);
        onChange(target.getContent());
        setTimeout(() => {
          // 定位最后的位置
          target.selection.moveToBookmark(p);
        }, 1);
      }}
      init={{
        base_url: "/tinymce/",//告知tinymce,所有插件、主题走我这个入口
        language: "zh-Hans",//设置中文语言
        language_url: "/tinymce/langs/zh-Hans.js",//中文语言引入地址
        height: 500,
        menubar: false,
        statusbar: false,
        plugins: ['code', 'image'],
        toolbar: ['formatselect fontfamily fontsize | bold italic backcolor | undo redo',
          'alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | image | removeformat code'],
        font_family_formats: '微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;',
        content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }',
        images_upload_handler: example_image_upload_handler,
      }}
    />

但这样又会出现新问题……就是编辑几个字之后,再点击一下才会触发onchange,也就是说点到别的地方光标会先跳回来一次,再点击一次才正常……

最后想了想它为什么会这么跳的原理,是因为onchange之后,改变了value值,导致组件又重新渲染了内容,所以只要value值不变,其实就不会有这问题。

于是只要简单加一个钩子:const [init] = useState(value);

把init替代value传到initialValue={value},就完美解决问题了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tinymce变化后onchange光标变化问题(React) 的相关文章

随机推荐

  • 单片机——蜂鸣器(生日快乐歌)

    基础知识 改变单片机引脚输出波形的频率 就可以调整控制蜂鸣器音调 产生各种不同音色 音调的声音 改变输出电平的高低电平占空比 占空比是指一个周期内高电平所占的时间 则可以控制蜂鸣器的声音大小 单片机采用的是无源蜂鸣器 需要产生一定的脉冲才能
  • Acwing-873. 欧拉函数

    欧拉函数的证明使用了容斥原理 include
  • IDA反汇编之栈帧例释

    目录 1 例释环境和预备知识 1 1 运行环境 1 2 IDA版本 1 3 预备知识 2 函数调用约定 3 函数局部变量布局 4 函数栈帧示例 5 IDA栈视图 1 例释环境和预备知识 1 1 运行环境 本示例运行环境为Windows 10
  • VLAN(虚拟局域网)的用法与配置

    一 交换机的作用 区别集线器 HUB HUB为物理层设备 只能直接转发电流 交换机为数据链路层设备 可以将电流与二进制转换 实现了以下功能 1 无限的传输距离 2 彻底解决了冲突 所有接口可以同时收发数据 3 二层单薄 物理寻址 在一个交换
  • Eigen:基础入门到使用

    文章目录 一 基础介绍 1 1 安装 1 2 框架 二 矩阵基础 2 1 矩阵和向量 2 2 动态矩阵 2 3 定义 2 4访问矩阵元素 2 5 重置矩阵大小 2 6 怎么选择固定矩阵和动态矩阵 三 矩阵的运算 3 1 加法和减法 3 2
  • android studio jvm设置,如何使用gradle和kotlin为android studio设置jvm目标?

    尝试编译用kotlin编写的单元测试时出现以下错误 任务 app compileDebugUnitTestKotlin失败 无法将使用JVM target 1 7构建的字节码内联到使用JVM target 1 6构建的字节码中 请指定正确的
  • 一款可以完美替代浏览器自带起始页的新标签页插件:Wetab

    现在打开你们的浏览器 映入眼帘的是不是一片空白的自带起始页 或者是乱七八糟布满网站快捷方式的页面 Wetab新标签页是一款没有广告并且免费使用的浏览器插件 还原一个干净纯粹的浏览器体验 一 为什么要用wetab 本人已经被那些乱七八糟的起始
  • 递归超时怎么办?递归与递推的区别?递归的优化之道

    递归超时怎么办 递归的优化之道 平时在做题的时候 我们经常都要用到递归来解题 因为递归能最快速的让计算机知道我们想让他做什么 解放了我们的思维量 但在一定程度上加重了计算机的计算量 这也是可能超时的原因所在 方便我们阅读理解和修改 这里我想
  • 算法训练营第十四天(7.26)

    目录 LeeCode102 Binary Tree Level Order Traversal LeeCode226 Invert Binary Tree LeeCode101 Symmetric Tree LeeCode102 Binar
  • 将字符串以单词为单位逆序"I am a Student" 解法

    网上有个题目 将字符串以单词为单位逆序 例如 I am a Student 要变成 Student a am I 解法大致为 先将字符串整体逆序第一个字符和最后一个交换 第二个与倒数第二个交换 一直到完成整个串逆序 即 tnedutS a
  • 什么叫做项目孵化_【热点】孵化100个项目成功95个,创新工场凭什么?

    原标题 热点 孵化100个项目成功95个 创新工场凭什么 向死而生 我修的死亡学分 李开复 本文约3500字 建议阅读时间8分钟 2016年春节过后 创新工场创始人 董事长李开复带领工场内100多名创业者 15天里拜访了26位硅谷科技大咖
  • 使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案-1

    目录 前言 一 目录结构 二 注册表研究 1 HKEY LOCAL MACHINE SOFTWARE WOW6432Node Tencent MobileGamePC 2 HKEY CURRENT USER Software Tencent
  • Qt浅谈之四十六QemuQuestAgent的应用

    一 简介 qemu ga是在虚拟机中安装的一个agent 宿主机host通过通道 unix socket 与虚拟机vm内部的agent进行通信 这样宿主机就有了一种从外部控制 获取虚拟机的手段 比如 host可以向vm下发执行修改hostn
  • RabbitMQ-延迟队列

    文章目录 前言 什么是延迟队列 实现延迟队列 使用RabbitMQ实现延迟队列 步骤1 创建RabbitMQ连接和通道 步骤2 创建延迟队列和死信队列 步骤3 发送延迟消息 死信队列 前言 随着现代应用程序对消息队列的需求不断增长 延迟队列
  • 小程序开发:Component “pages/index/index“ does not have a method “onGetOpenid(p)“ to handle event “tap“

    小程序的坑又来啦 当我们在js里面很快乐的写了一个带参数的方法 然后在页面上使用bindtap去调用时 就像我这样 不要吐槽 我是测试代码 然后就会愉快的发现 嗯 怎么解决呢 去掉括号和参数 加一个date 问号1代表你接受参数的名称 问号
  • 读spring in action spring 之旅

    spring bean 的作用域 Spring定义了多种作用域 可以基于这些作用域创建bean 包括 单例 Singleton 在整个应用中 只创建bean的一个实例 原型 Prototype 每次注入或者通过Spring应用上下文获取的时
  • 【CV夏令营】学习笔记01:跑通机器学习版本baseline

    0 学习背景 有幸参与了DataWhale的AI视觉夏令营 沉浸式全流程体验AI比赛 比赛题目是 脑PET图像分析和疾病预测挑战赛 这里给出链接 https challenge xfyun cn topic info type pet 20
  • 快速找到某台电脑上tomcat的安装路径

    所有程序 gt Apache Tomcat 7 0 Tomcat7 gt Tomcat 7 0 Program Directory 即可 当然前提是他的是window安装版
  • 【人生第一份offer~】北京京东科技 日常实习一面二面(已OC) 21/12/22&23

    北京京东科技 日常实习一面 21 12 22 体验极佳的一次面试 面试官大大贼温柔 循循善诱地帮助我把问题捋出来 另外问题也都对我这个初学者很友好 超级简单哈哈哈 面试完半个小时二面电话就来了 约到了明天上午十一点 聊项目 说下你在这个大型
  • tinymce变化后onchange光标变化问题(React)

    关于tinymce富文内容变化后 光标会自动跳到最前面的问题 比如回车 复制粘贴 都会跳到最前面 由于我是ant design pro包了一层 它给分配的value和onchange 不用的话 确实也不会有这问题 但那样form提交表单时