React 进阶面试题, 如何在 React 中使用 innerHTML?
React 进阶面试题, 如何在 React 中使用 innerHTML?
QA
Step 1
Q:: 如何在 React 中使用 innerHTML?
A:: 在 React 中,直接使用 innerHTML
是不推荐的,因为这可能导致 XSS(跨站脚本攻击)的风险。取而代之的是,React 提供了 dangerouslySetInnerHTML
属性,它允许开发者直接设置 HTML 内容。使用时需要非常谨慎,确保所插入的 HTML 是可信任的。用法示例如下:
<div dangerouslySetInnerHTML={{ __html: '<p>Some HTML content</p>' }}></div>
这里,__html
是必须的,并且它的值是你要插入的 HTML 字符串。
Step 2
Q:: 使用 dangerouslySetInnerHTML 的风险是什么?
A:: 使用 dangerouslySetInnerHTML
的主要风险是它可能导致 XSS(跨站脚本攻击)。如果输入的内容没有经过充分的验证和消毒,恶意用户可以插入恶意脚本,导致安全漏洞。因此,在使用这个属性时,开发者必须确保所插入的 HTML 内容是完全可信的,最好只使用来自受信任来源的内容。
Step 3
Q:: 什么时候在 React 中会使用 dangerouslySetInnerHTML?
A:: 通常在处理富文本编辑器或从第三方 API 获取的内容时,可能需要使用 dangerouslySetInnerHTML
。例如,当你从 CMS 系统获取 HTML 内容并将其显示在页面上时,你可能会用到它。然而,开发者应该尽量避免使用这个属性,除非确实没有其他选择,并且确保所有内容已经过安全验证。
Step 4
Q:: React 为什么不推荐使用 innerHTML?
A:: React 不推荐使用 innerHTML
是因为它破坏了 React 的虚拟 DOM 机制,并且容易引发安全问题。React 的设计哲学是通过声明式编程管理 DOM,而 innerHTML
属于命令式编程风格,会绕过 React 的虚拟 DOM,导致 React 无法正确地跟踪 DOM 变化。此外,直接操作 DOM 的 innerHTML
可能引入 XSS 漏洞。