reactjs - 将 innerHTML 设置为清除 React ref 的方法有哪些风险?
问题描述
我正在使用一个外部库,我无法控制在表格中显示一些按钮。输出看起来有点像这样:
[BUTTON_A] [PRODUCT_NAME_A] [PRODUCT_PRICE_A]
[BUTTON_B] [PRODUCT_NAME_B] [PRODUCT_PRICE_B]
[BUTTON_C] [PRODUCT_NAME_C] [PRODUCT_PRICE_C]
这个库有一个方法renderButtons(flags, container)
,接受一组标志(不相关),以及对渲染按钮的容器的引用
我现在正在实现列的行排序功能,因此必须使用新排序的产品数组重新渲染表。
目标是获得:
[BUTTON_C] [PRODUCT_NAME_C] [PRODUCT_PRICE_C]
[BUTTON_B] [PRODUCT_NAME_B] [PRODUCT_PRICE_B]
[BUTTON_A] [PRODUCT_NAME_A] [PRODUCT_PRICE_A]
这是该功能的初始代码:
const Button = () => {
const containerRef = useRef<HTMLDivElement>();
React.useEffect(() => {
buttonsLibrary.renderButtons(myFlags, containerRef.current);
}, [myFlags ,containerRef])
}
但是当然,当组件重新渲染时,这只会将一个新按钮附加到容器中,所以我得到了多个按钮。
现在,我无法控制该renderButtons(flags, container)
方法的实现,所以我想到的唯一选择如下:
const Button = () => {
const containerRef = useRef<HTMLDivElement>();
React.useEffect(() => {
if (containerRef.current.innerHTML.length > 0) {
containerRef.current.innerHTML = "";
}
buttonsLibrary.renderButtons(myFlags, containerRef.current);
}, [myFlags ,containerRef])
}
现在我正在尝试考虑这是否是一个好主意,是否有替代方案,以及这可能导致什么类型的问题。
你们有什么感想?有没有更好的方法来实现我正在寻找的结果?
解决方案
推荐阅读
- flutter - Chrome 不会自动向用户指示可以安装 Progressive Web App
- reactjs - 在 React 中渲染嵌套对象的问题
- git - 无法将文件夹推送到 Bitbucket 中的远程仓库
- amazon-web-services - 如何将弹性 beanstalk 环境类型从负载平衡更改为单实例
- python - Raspberry Pi 4 - 8gb RAM、64gb SD 卡内存不足尝试加载 TensorFlow 模型
- python - 使用 * 参数从 sklearn 子类化的正确方法
- java - 如何解析/拆分和打印 URL?
- google-apps-script - 将外部超链接转换为超链接公式
- class - Flutter Hot Restart - 怀疑它错误地填充了类实例
- lightweight-charts - 如何更改直方图条的粗细?