javascript - 用于突出显示文本和从文件重新加载突出显示的 React 组件
问题描述
我正在创建具有以下功能的文本荧光笔:
- 它允许用户选择和突出显示/取消突出显示页面上不同颜色的文本。
- 从文件中加载突出显示(从页面中的文件中搜索单词并突出显示它们)。
我能够使用 rangy https://github.com/timdown/rangy(它不是反应组件)创建突出显示和删除突出显示功能,但是每当页面上的任何组件使用(setState 方法)设置状态时,这些突出显示消失。
此外,使用此方法不容易将先前突出显示的项目加载到页面中。
这就是我再次重新开发此功能的原因,我想知道解决此问题的正确方法是什么?
我一直在考虑开发一个自定义的 React 组件来突出显示并将其添加到页面中,但是对于这种方法,我想知道如何在用户选择页面上的文本时动态添加突出显示组件而不会在状态时丢失它已更新。
一个关于如何添加动态组件的有用资源的链接对我来说很方便,因为我一直在寻找解决这个问题的正确方法,但我认为我可能没有朝着正确的方向前进。
解决方案
React 会重新渲染任何状态发生变化的东西。这将导致您的突出显示消失,因为即使它们看起来相同,元素也不相同。
如果您在许多情况下设置唯一键属性, React也将智能地不重新渲染。这让 React 知道要重用组件。
如果状态正在正确更改,并且您有时只想阻止重新渲染,您应该实现一个shouldComponentUpdate 生命周期方法来自己控制重新渲染条件。
推荐阅读
- java - 如何在单独的行中显示错误消息
- java - 如何在aspectj中将一些参数从之前的方法传递到之后
- apache-spark - 错误:无法找到或加载主类 org.apache.spark.launcher.Main
- javascript - 使用 JS 从字符串中拆分 URL
- javascript - 如何通过开关条件访问数组?
- ios - 使用编码协议解析 JSON nil 值
- linux - 使用 .NET Core 在 Linux 上更改文件所有者
- java - java 'String[] args' 的 main 函数中的参数是否创建了一个对象?
- javascript - Firefox 插件:在弹出窗口中访问存储
- allure - Allure_behave 不起作用:AllureFormatter 未知