首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在自定义JS应用程序的一部分中使用React组件--如何清理?

在自定义JS应用程序的一部分中使用React组件--如何清理?
EN

Stack Overflow用户
提问于 2022-06-09 20:01:29
回答 1查看 38关注 0票数 0

最近,我已经开始为我的自定义JavaScript应用程序的特定部分使用React。它运行良好,但我不太明白我如何“卸载”或“停止渲染”或“清理”一个反应组件,当我不再需要它?

请考虑以下打开作为React组件的模态的示例。然后,我如何关闭它和清理反应方面的事情适当?

MyApp.js (仅限JavaScript,无反应)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { renderReactModal } from "./ReactModal.jsx";

class MyApp {

    // I call this when I want to show my React component
    openReactModal() {

        // Create an empty div and append it to the DOM
        this.modalDomElem = document.createElement("div");
        document.append(this.modalDomElem);

        // Render the React component into the div
        renderReactModal(this.modalDomElem);
    }

    // I call this method when I want to hide my React component
    closeReactModal() {
        // Is it enough to do this to unmount / stop the React component from rendering?
        // Or is there any other React-specific clean-up code required?
        this.modalDomElem.remove();
    }
}

ReactModal.jsx (反应转到这里)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react";
import ReactDOM from "react-dom";

class ReactModal extends React.Component {

    render() {
        return <h2>React Modal</h2>
    }
}

export const renderReactModal = (domElem) => {
    // NB: This syntax is for React 16 (different in 18).
    ReactDOM.render(
        <ReactModal />,
        domElem
    );
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-10 01:01:32

我搜索了更多,最终找到了React:https://reactjs.org/docs/react-dom.html#unmountcomponentatnode的这一部分

使用ReactDOM.unmountComponentAtNode(container)似乎是实现这一目标的推荐方法:

从DOM中删除已挂载的React组件,并清理其事件处理程序和状态。

使用这个想法,我可以如下所示修改我的初始代码。

MyApp.js (仅限JavaScript,无反应)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { mountReactModal, unmountReactModal } from "./ReactModal.jsx";

class MyApp {

    // I call this method when I want to show my React component
    openReactModal() {

        // Create an empty div and append it to the DOM
        this.modalDomElem = document.createElement("div");
        document.append(this.modalDomElem);

        // Mount the React component into the div
        // NB: This causes the React component to render
        mountReactModal(this.modalDomElem);
    }

    // I call this method when I want to hide my React component
   closeReactModal() {

        // Unmount the React component from the div
        // NB: This cleans up the React component's event handlers and state
        unmountReactModal(this.modalDomElement);

        // Remove the div from the DOM
        this.modalDomElem.remove();
    }
}

ReactModal.jsx (反应转到这里)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react";
import ReactDOM from "react-dom";

class ReactModal extends React.Component {

    render() {
        return <h2>React Modal</h2>
    }
}

// Mount
export const mountReactModal = (domElem) => {
    // NB: This syntax is for React 16 (different in 18).
    ReactDOM.render(
        <ReactModal />,
        domElem
    );
}

// Unmount
export const unmountReactModal = (domElem) => {
    // NB: This syntax is for React 16 (different in 18).
    ReactDOM.unmountComponentAtNode(domElem);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72568969

复制
相关文章
在Linux系统中安装LAMP出现的错误总结
总结一下用源代码安装LAMP环境中遇到常见的错误,从错误3开始是因为安装php后面带参数,导到没有找到开发包例如:./configure --with-gd  --with-libjpeg会出现如下错误。
星哥玩云
2022/06/28
3.2K0
在Linux系统中安装LAMP出现的错误总结
在HTML页面中引入公共的部分的代码
在做前端网页的时候,会涉及到很多界面,有的时候,这些界面都会有重复的代码,比如侧边栏菜单的重复代码,头部导航的 重复代码,底部的重复代码,这个时候,为了使每个页面的代码看起来简洁明了,我们需要把这些重复的代码放到公共的页面里面,在具体页面只需引用即可。
王小婷
2019/05/17
5.3K0
FFmpeg代码导读——HEVC在RTMP中的扩展
为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具体修改内容见下。
LiveVideoStack
2021/09/02
1.7K0
FFmpeg代码导读——HEVC在RTMP中的扩展
4个代码中,出现频率最高的字符串
在程序员的代码里,字符串是经常出现的形式。有些语句虽然没有什么意义,但却无孔不入,我们经常见到它的身影。
xjjdog
2020/05/29
7170
在 Karma 中测试覆盖率
最近自己用vue造轮子开发UI框架 https://zyqq.github.io/wheel/,为了使代码更健壮,采用了Karma做单元测试,并尝试测试覆盖率以检测测试质量。以下是测试覆盖率过程。
EchoROne
2022/08/15
1.1K0
在 Karma 中测试覆盖率
IDEA中调试Topology出现的错误
在IDEA的maven项目中编写Topology出错: NoClassFound找不到主类:解决– 在pom.xml中,找到中的storm,添加<>compi<>
ZONGLYN
2019/08/08
1.4K0
算法-删除字符串中的公共字符
该文讲述了如何删除字符串中的公共字符,通过创建一个hash表来存储字符串中每个字符的出现次数,然后遍历字符串,将不需要删除的字符保留,需要删除的字符则用另一个数组存储,最后将修改后的字符串全部替换回来。这种方法的时间复杂度为O(n),空间复杂度为O(256)
chaibubble
2018/01/02
3.6K0
算法-删除字符串中的公共字符
angular2中在使用路由懒加载时候出现的错误
ERROR in Cannot use 'in' operator to search for 'providers' in null 出现这个问题的原因是,在使用懒加载的时候,没有指定module,没有找到相关的提供信息。 const routes: Routes = [ {path:'login',component:loginComponent}, { path: 'about', loadChildren: './home/home/home.module'},] 以上是修改之前报错的代码:
杭州前端工程师
2018/06/15
5.1K0
在Kubernetes集群中扩展CoreDNS
我正在分享在Kubernetes(1.12)中使用CoreDNS(1.2.5)运行的一些测试结果,以便为将CoreDNS调整到您的集群提供一些参考点。除了在默认配置中测试CoreDNS之外,我还测试了CoreDNS并启用了可选的autopath插件。autopath插件是一种优化,有助于透明地缓解由于Kubernetes臭名昭着的ndots:5问题而导致的Pod性能损失。这些测试在启用autopath时量化了内存/性能交易。
CNCF
2019/12/05
2.2K0
在Kubernetes集群中扩展CoreDNS
[译] 在 vue-test-utils 中 mock 全局对象
原文:https://itnext.io/mocking-global-objects-in-vue-test-utils-a8822df013a8
江米小枣
2020/06/15
1.6K0
VS2013中Python学习笔记[基础入门]
        在上一节中简单的介绍了在VS2013中如何进行开发Hello World,在VS2013中进行搭建了环境。本节主要来简单的学习一下关于Python的基础。
aehyok
2018/08/31
5230
VS2013中Python学习笔记[基础入门]
字符串中字符出现重复字符
下面是总结的一些常见问题,以供大家参考 第一次出现重复字符 出现的重复字符 出现字符串、字符还有次数 出现次数最多的字符及次数 class Eclass{ public static void main(String[] args) { String str = "eeeejwurihewweafa"; Eclass e = new Eclass(); //问题一 int index = e.Method(str); S
崔笑颜
2020/06/08
1.7K0
windows系统下VS2013或者VS2017的C4996错误解决方法
由于微软在VS2013中不建议再使用c的传统库函数scanf,strcpy,sprintf等,所以直接使用这些库函数会提示C4996错误,在源文件中添加以下指令就可以避免这个错误提示: 法一: #define _CRT_SECURE_NO_WARNINGS 把这个宏定义一定要放到.c文件的第一行。 法二: 在主函数任意一行加上如下代码: #pragma warning(disable:4996) 如下图所示:
黑泽君
2018/10/11
7890
VS2013中Python学习笔记[环境搭建]
Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
aehyok
2018/08/31
7180
VS2013中Python学习笔记[环境搭建]
工作负载不要全部放在公共云的篮子中
有些东西并不属于公共场合,与此类似,公共云可能不总是适合所有工作负载。 这个声明从来没有像最近两次非常公开的云中断那样更加相关。亚马逊和微软公司对此都必须迅速采取行动,安抚那些无法连接到存储在其AWS
静一
2018/03/27
9860
工作负载不要全部放在公共云的篮子中
VS2013中Python学习笔记[环境搭建]
Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
aehyok
2019/02/25
5930
讨论覆盖函数中偏函数扩展的复杂性
摘要:覆盖函数是子模块函数的重要子类,可用于机器学习,博弈论,社交网络和设施位置。我们研究了覆盖函数的偏函数扩展的复杂性。也就是说,给定由[m]的子集族和每个点的值组成的部分函数,​​是否存在在[m]的所有子集上定义的扩展该偏函数的覆盖函数?偏函数扩展以前是针对其他函数类进行研究的,包括布尔函数和凸函数,并且在许多领域都很有用,例如在学习这些函数类时获得边界。
罗大琦
2019/07/18
8080
错误票据test
本文最后更新于 1163 天前,其中的信息可能已经有所发展或是发生改变。 #include<iostream> #include<cstring> #include<algorithm> #include<vector> #include<cmath> using namespace std; int main(){ int n; vector<string> vec; vector<string> vecarr; cin>>n; cin.ignore(); for(int i=0;i<n;i
Yuyy
2022/06/28
1360
在input中回车后页面提交导致出现HTTP 错误 405.0 - Method Not Allowed
前些时间在做一个搜索功能时发现一个比较有意思的现象,场景是这样的:在一个模态窗口中是一个订单列表,页面的顶部有若干个状态筛选框和一个搜索关键字输入框,当焦点在关键字输入框时按回车,本来是对input的keyup事件做了监听,当发现是按了回车键时便自动提交搜索请求的,但输入关键字后按回车时页面竟然跳转了,并且出现“HTTP 错误 405.0 - Method Not Allowed无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)”的错误,非常纳闷。
风柏杨4711
2021/03/15
1.9K0
点击加载更多

相似问题

Django DRP post方法如何传递参数

23

使用POST方法的Django问题

42

AJAX传递POST请求,Django问题

24

hyperledger composer post方法:如何在post方法中传递参数

10

如何传递参数删除方法?(django)

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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