我正在尝试使用React并重新渲染iframe,我不确定React如何正确地重新呈现iframe,尤其是那些指向文本编辑器的iframe。这是一个jsFiddle显示这个:
https://jsfiddle.net/augburto/fkqnm329/2/
我指出的文本编辑器并不重要,但我正在做的是当你点击Trigger Update时,它会调用一个setInterval
,它将不断设置一个新的状态,从而触发重新渲染。
我认为可能会发生的事情是,当我输入iframe
textarea
时,它将不可避免地重新渲染,从而使我失去了文本编辑器的位置,但不知怎的,我能够尽管在console.log
中看到了重新渲染,但无缝地输入,没有任何问题。注意我并不是说它应该这样做 - 我只是想知道它为什么不这样做。我知道React internals do some smart things like transactions但我不希望它保持我的光标位置或我选择的位置。
那么React如何更具体地重新渲染iframe ?我已经阅读过文章(例如this和this,但是他们并没有对我发表过很多看法。它与常规DOM元素有什么不同吗?
答案 0 :(得分:0)
好的,过了一段时间,我想我相信我找到了答案。一般来说,因为React只是创建一个虚拟DOM并在幕后做差异,所以它实际上只是查看iframe元素而不是生成的内容。这是一个完全独立的事情,iframe创建自己的浏览上下文。阅读MDN documentation on iframe非常有用:
HTML元素表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中。在HTML 4.01中,文档可能包含头部和主体或头部和框架集,但不包含主体和框架集。但是,可以在普通文档正文中使用。每个浏览上下文都有自己的会话历史记录和活动文档。包含嵌入内容的浏览上下文称为父浏览上下文。顶级浏览上下文(没有父级)通常是浏览器窗口。
我认为React在解析iframe
时确实做了一些特别的事情,但总的来说它并没有太大的偏差。
我认为可能提供信息的是React如何处理输入元素 - 一般来看一般的Controlled Components表单,因为React有一个完全独立且特殊的方式来处理这些情况。