首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >dangerouslySetInnerHtml在渲染期间不会更新

dangerouslySetInnerHtml在渲染期间不会更新
EN

Stack Overflow用户
提问于 2015-05-14 16:32:36
回答 5查看 7.5K关注 0票数 10

因此,我制作了一个组件,用于在我的应用程序中包含内容可编辑的组件。我抄袭了一些我相信的要点,然后编辑成我需要的内容。

代码如下。当我编辑它时,它会触发父对象上的更新,但当我试图在父对象中设置props.html时,它不会在UI中反映出来。此外,console.log显示this.props.html等于空字符串,但UI不更新,并保留原来在那里的文本。

我不明白这怎么可能..。dangerouslySetInnerHtml = {__html:''}应该可以使UI反映空字符串...感觉它应该不可能显示旧的文本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var React = require('react');

var ContentEditable = React.createClass({
    render: function(){
        //TODO: find where html=undefined and fix it! So I can remove this? Maybe I should keep this safety.
        var html = this.props.html || '';
        console.log('content editable render, html: ', this.props.html);
        return <div id="contenteditable"
            onInput={this.emitChange} 
            onBlur={this.emitChange}
            contentEditable
            dangerouslySetInnerHTML={{__html: html}}></div>;
    },
    shouldComponentUpdate: function(nextProps){
        return nextProps.html !== this.getDOMNode().innerHTML;
    },

    emitChange: function(){
        var html = this.getDOMNode().innerHTML;
        if (this.props.onChange && html !== this.lastHtml) {
            this.props.onChange({
                target: {
                    value: html
                }
            });
        }
        this.lastHtml = html;
    }
});

module.exports = ContentEditable;

(一个小背景,我正在尝试在提交要保存的输入后将其清除。清算不起作用,因此出现这个问题。)

EN

回答 5

Stack Overflow用户

发布于 2016-07-24 04:00:22

我在使用contentEditableshouldComponentUpdate时遇到了一个非常类似的问题,当使用dangerouslySetInnerHTML函数(或prop)将innerHTML重置为相同的前值时,似乎存在一个错误(我认为即使您不使用它来插入代码,它也不起作用)……我怀疑(这只是一个想法) React将通过dangerouslySetInnerHTML设置的最后一个值与您试图发送的新值进行比较,并决定不更新组件,因为它是相同的(即使实际的innerHtml因用户交互而更改,因为这些交互不会在React上触发任何状态或道具更新)。

解决方案:我发现最简单的解决方案是每次需要重新渲染时使用不同的键。例如,使用key={Date()}

示例: Here当您键入'?‘时,您可以找到您的代码(我更改了其中的一些代码以使其正常工作)。在div中,ContentEditable组件中的文本应该变成一个空字符串(即''),它只工作一次,第二次键入'?‘。将不会工作,因为react的innerHTML将与您设置的相同(即空字符串,因此它不会更新组件)。

对于here,我向可编辑组件添加了key={Date()} (这是向您展示此工作的最简单方式,但它不是每次重新渲染时设置唯一键的最佳方式),现在您可以键入任意数量的'?‘它会起作用的。

票数 10
EN

Stack Overflow用户

发布于 2017-05-04 18:45:19

我找到了另一个可能比生成随机密钥更好的解决方案。将键专门放在调用#dangerouslySetInnerHtml的div上,而不仅仅是组件本身

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class='wrapper'>    
<div key={this.props.thing.id} dangerouslySetInnerHtml={this.props.thing.content} />
</div>
票数 2
EN

Stack Overflow用户

发布于 2018-02-25 13:48:57

我遇到了同样的问题(React 16),并使用了MLR建议的一种方法,即删除dangerouslySetInnerHTML,并使用componentDidMount()代替初始渲染,使用componentDidUpdate()代替任何后续渲染。

Solution here,适用于React 16:https://codepen.io/mlbrgl/pen/PQdLgb

这些钩子将执行相同的更新,直接从props更新innerHTML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
componentDidMount() {
  this.updateInnerHTMLFromProps();
}

componentDidUpdate() {
  this.updateInnerHTMLFromProps();
}

updateInnerHTMLFromProps() {
  this.refEl.innerHTML = this.props.html;
}

这使得(至少对我来说)更清楚地看到到底发生了什么,而不会像Mike Woodcock here https://stackoverflow.com/a/38548616/9408759所建议的那样,错误地期望dangerouslySetInnerHTML会在所有情况下保持DOM同步。

有关此处列出的问题和两种解决方案的完整视图,请查看https://codepen.io/mlbrgl/pen/QQVMRP

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30242530

复制
相关文章
WPF 已知问题 窗口在屏幕外创建将不会刷新渲染
本文告诉大家一个 WPF 的已知问题,如果窗口在创建的时候,设置在屏幕外,那这个窗口将不会进行实际的渲染,将这个窗口从屏幕外移到屏幕内的时候,将会出现窗口内容的一次闪烁。换句话说就是存在窗口内容的重渲染
林德熙
2020/10/09
7730
异步渲染的更新
一年多来,React 团队一直致力于实现异步渲染。上个月,在 JSConf 冰岛的演讲中,Dan 揭晓了一些令人兴奋的新的异步渲染可能。现在,我们希望与你分享我们在使用这些功能时学到的一些经验教训,以及一些帮助你在组件启动时准备异步渲染的方法。
Fonkie
2019/07/27
3.5K0
等待YOLOv4的期间,它还在更新
前几天整理了:目标检测三大开源神器:Detectron2/mmDetectron/SimpleDet,很多 CVers 反映希望多看到这样的优质项目推荐(估计论文看烦了,哈哈)。
Amusi
2019/12/24
9990
AI 技术讲座精选:如何在时序预测问题中在训练期间更新LSTM网络
使用神经网络解决时间序列预测问题的好处是网络可以在获得新数据时对权重进行更新。 在本教程中,你将学习如何使用新数据更新长短期记忆(LTCM)递归神经网络。 在学完本教程后,你将懂得: 如何用新数据更
AI科技大本营
2018/04/26
1.5K0
AI 技术讲座精选:如何在时序预测问题中在训练期间更新LSTM网络
CSS到底会不会阻塞页面渲染
可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我们就一起来分析一下。
前端逗逗飞
2021/04/30
4.9K0
CSS到底会不会阻塞页面渲染
React源码解析之updateHostComponent和updateHostText
还是在 React源码解析之workLoop 中,有一段HostComponent和HostText的更新:
进击的小进进
2020/02/24
1.1K0
React源码解析之updateHostComponent和updateHostText
React 的一些最佳安全实践
React.js、Vue.js 这些现代的前端框架默认已经对安全做了非常多的考虑,但是这仍然不能阻碍我们写出一些安全漏洞 。。。因为框架永远不能完全限制我们编程的灵活性,只要有一定的灵活性存在就意味着有安全风险。
ConardLi
2023/01/09
1.1K0
React 的一些最佳安全实践
列表渲染之数组、对象更新检测
数组更新检测API (opens new window) 对象更新检测API (opens new window)
小小杰啊
2022/12/21
1.3K0
WPF程序在shutdown期间引发的TaskCanceledException
问题是这样的,从5月份开始,陆续有公司发现自己的WPF软件收到大量用户报告TaskCanceledException 异常,
黄腾霄
2020/06/10
8570
上班期间在 IDEA 里面斗地主。。强悍!
点击关注公众号,Java干货及时送达 来源:https://www.xeblog.cn/articles/96 前言 如果说,在IDEA里下个棋很过分,那在IDEA里斗个地主,是不是就更过分了? 开始 登入 通过 #login {昵称} 命令登入服务器 查看游戏列表 通过 #showGame 命令查看游戏列表 运行斗地主游戏 通过 #play {游戏编号} 命令运行游戏 启动斗地主游戏命令 #play 1 支持人机和联机两种游戏方式,咱们先来看下人机模式,直接点击 “开始游戏” 按钮 内置的机器
Java技术栈
2022/09/26
4050
上班期间在 IDEA 里面斗地主。。强悍!
在奋斗的硕博期间,不要选择躺平
为什么别人总是那么秀? Paper不断,成果一堆! 隔壁生产队的驴都没这么能干的~ 不选择躺平是第一步 其次他没告诉你 自己一直关注的硬核公众号 不仅学术动态尽知 还能习得深度干货 掌握学术思维方法 让你分分钟成为资深学术人 还等什么 赶紧关注吧 赶紧♥长按二维码, 选择“识别图中二维码”订阅。 ---- ▼ 日读好书 ID:rdhs888 简介:读每一次的翻阅,都是一场久别的重逢,一个人,一句话;一段故事,一生思索,关注我,让文字触动你的灵魂! ▲长按上方二维码识别关注 医学硕博园 ID:yixu
AI科技评论
2022/05/05
1K0
在奋斗的硕博期间,不要选择躺平
在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
在默认情况下,当 Docker 守护进程终止时,它将关闭正在运行的容器。不过,我们可以配置该守护进程,以便在该守护进程不可用时容器仍在运行。这种功能称为实时恢复。实时还原选项有助于减少由于守护进程崩溃、计划中断或升级而导致的容器停机时间。
非著名运维
2023/02/20
4.2K0
在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
避免在Pod重启期间继续接收业务流量
在TKE Serverless 集群中部署了某个服务,并且通过 Loadbalancer 类型的 Service 来暴露服务,接受流量请求。然而,当 pod 副本发生重启时,可能依然会有业务流量请求到了 正在重启中 的 pod 副本,进而出现请求错误。
keke.wang
2023/08/17
3270
浅谈 React 中的 XSS 攻击
前端一般会面临 XSS 这样的安全风险,但随着 React 等现代前端框架的流行,使我们在平时开发时不用太关注安全问题。以 React 为例,React 从设计层面上就具备了很好的防御 XSS 的能力。本文将以源码角度,看看 React 做了哪些事情来实现这种安全性的。
政采云前端团队
2020/09/24
2.7K0
修复 WPF 窗口在启动期间短暂的白底显示
2017-11-03 15:08
walterlv
2018/09/18
2.6K0
修复 WPF 窗口在启动期间短暂的白底显示
为什么RCA在事件调查期间很重要?
一个组织,无论是在制造业、酒店业还是医疗保健业,都不太可能在没有事故的情况下运行。然而,事件的处理方式可以帮助组织保持竞争力并实现其业务目标。当事件发生时,需要对其进行调查并有效消除,这就是根本原因分析(RCA)的意义所在。
用户9972271
2022/09/23
2530
上班期间在 IDEA 里面斗地主。。骚操作!
开始游戏之后,系统会随机指定一名玩家优先叫分,叫分区间为 1~3 分,叫分高者为地主,也可以选择不叫,如果都不叫,则系统重新发牌,进行新一轮叫分,直到有人成为地主为止。
搜云库技术团队
2023/09/18
2610
上班期间在 IDEA 里面斗地主。。骚操作!
造一个 react-contenteditable 轮子
前言 以前在知乎看到一篇关于《一行代理可以做什么?》的回答: 当时试了一下确实很好玩,于是每次都可以在妹子面前秀一波操作,在他们惊叹的目光中,我心里开心地笑了——嗯,又让一个不懂技术的人发现到了程序的美🐶,咳咳。 一直以来,我都觉得这个属性只是为了存在而存在的,然而在今天接到的需求之后,我发现这个感觉没什么用的属性竟然完美地解决了我的需求。 一个需求 需求很简单,在输入框里添加按钮就好了。这种功能一般用于邮件群发,这里的按钮“姓名”其实就是一个变量,后端应该要自动填充真实用户的姓名,然后再把邮件发给
写代码的海怪
2022/03/29
1.7K0
造一个 react-contenteditable 轮子
React源码解析之HostComponent的更新(上)
接上篇 React源码解析之completeWork和HostText的更新 ,本文讲解下HostComponent多次渲染阶段的更新(下篇讲第一次渲染阶段的更新)。
进击的小进进
2020/03/04
5.9K0
2020-5-21-理解React的渲染更新
在聊渲染更新之前,我们不能忽视的一个概念是——React是JavaScript代码。
黄腾霄
2020/06/10
8330

相似问题

在渲染期间更新存储

22

componentDidUpdate:'dangerouslySetInnerHTML‘不会触发reactjs()?

11

will是否适用于dangerouslySetInnerHtml渲染的divs

22

为什么我的dangerouslySetInnerHTML渲染内容会被修改?

125

反应dangerouslySetInnerHTML渲染一个iframe从道具?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文