今天工作中使用了这个,感觉很好用啊!

首先: 这个ReactDom是干嘛用的?

答:

  react-dom 包提供了 DOM 特定的方法,可以在你的应用程序的顶层使用,如果你需要的话,也可以作为 React模型 之外的特殊操作DOM的接口。 但大多数组件应该不需要使用这个模块。

其次: 如何引用?

答:

如果你使用 ES6 与 npm ,你可以写 import ReactDOM from 'react-dom', 或者:import { render, unmountComponentAtNode } from 'react-dom'

再问: 有哪些接口?可以干嘛?

答:

一共有五个接口,

render()

hydrate()

ReactDOM.render(element, container[, callback])
// 渲染一个 React 元素到由 container 提供的 DOM 中,并且返回组件的一个 引用(reference) (或者对于 无状态组件 返回 null )

unmountComponentAtNode()

ReactDOM.unmountComponentAtNode(container)
// 从 DOM 中移除已装载的 React 组件,并清除其事件处理程序和 state 。 如果在容器中没有挂载组件,调用此函数什么也不做。 如果组件被卸载,则返回 true ,如果没有要卸载的组件,则返回 false

findDOMNode() 不建议使用

ReactDOM.findDOMNode(component)
// 如果组件已经被装载到 DOM 中,这将返回相应的原生浏览器 DOM 元素。在大多数情况下,你可以绑定一个 ref 到 DOM 节点上,从而避免使用findDOMNode。

createPortal()  这个很有用处,啊啊啊!

ReactDOM.createPortal(child, container)
// 创建一个 插槽(portal) 。 插槽提供了一种方法,可以将子元素渲染到 DOM 组件层次结构之外的 DOM 节点中

实例: 背景,我希望在任意页面 点击一个按钮,都可以打开同一个模态框。那么我希望只写一个方法,其他按钮点击触发这个方法,这个方法会把模态框渲染。

上代码:

export const onpenRegistration = (props = {}) => {
const div = document.createElement('div') // create一个容器
const obj = { // 这个模态框还需要消失,也就是卸载,因此需要传unmountComponentAtNode()方法
removeContainDiv: () => {
unmountComponentAtNode(div)
document.body.removeChild(div)
}
}
const registration = React.createElement(Notification, { ...props, ...obj }) // 这个是使用creatElement()方法,create一个react element
render(registration, div) // render第一个参数是reactElement,第二个是容器,这一步实现了在这个div容器中渲染Notification元素
document.body.appendChild(div) // 将divappend到body中
}

Notification是一个普通的react元素:

class Register extends Component {
constructor (props) {
super(props)
this.state = {
show: true
}
}
render () {
const { show } = this.state
const { removeContainDiv } = this.props
return(
<div onclick={removeContainDiv}>hshshs</div>
)
}
}

现在就可以使用onpenRegistration方法了:

import { openIndicatorRegistration } from './indicatorRegistration'

render(){
<button onClick={openIndicatorRegistration}>
打开注册模态框
</button>
}

任何地方都可以用哦。方便吧!开心脸

ReactDom的更多相关文章

  1. React.render和reactDom.render的区别

    刚开始学习react.js.发现网上的资料,有些是写着react.render,有些写着reactDom.render.觉得很奇怪就查阅了一下资料.解释如下: 这个是react最新版api,也就是0. ...

  2. ReactDom.render和React.render的区别

    这个是react最新版api,也就是0.14版本做出的改变.主要是为了使React能在更多的不同环境下更快.更容易构建.于是把react分成了react和react-dom两个部分.这样就为web版的 ...

  3. react-dom.js 源码

    /** *以下这是 react-dom.js 的源代码 * ReactDOM v15.3.1 * * Copyright 2013-present, Facebook, Inc. * All righ ...

  4. Error! Failed to install react, react-dom, next, try again.

    问题:用create-next-app创建应用报错,部分模块没有安装,react.react-dom.next等模块安装失败,如下图所示 操作环境: 系统:Ubuntu 16.04.4 LTS npm ...

  5. React入门介绍(1)-ReactDOM.render()等基础

    React入门介绍-ReactDOM.render()等基础 首先,React是一个用于构建用户界面的Javascript库,但Peact并不是一套完整的MVC或MVVM的框架,它仅涵盖V-view视 ...

  6. React源码 ReactDOM.render

    在 react 当中,主要创建更新的有三种方式 1.ReactDOM.render || hydrate  这两个api都是要把这个应用第一次渲染到我们页面上面,展现出来整个应用的样子的过程,这就是初 ...

  7. ReactDOM & DOM Elements

    一.ReactDOM 1.1 render() ReactDOM.render(element,container,[callback]) 在container中渲染一个React元素,然后返回组件一 ...

  8. React16源码解读:揭秘ReactDOM.render

    引言 在上一篇文章中我们通过create-react-app脚手架快速搭建了一个简单的示例,并基于该示例讲解了在类组件中React.Component和React.PureComponent背后的实现 ...

  9. React && ReactDOM

    如果你是 React 的初学者,一定会对 React 和 ReactDOM 感到迷惑.为什么要分成两个包呢?害得我还要引入两次,说好的减轻开发人员负担呢,这丫的在搞什么飞机.带着这个疑问,我们一起来康 ...

随机推荐

  1. 探秘JS的异步单线程

    对于通常的developer(特别是那些具备并行计算/多线程背景知识的developer)来讲,js的异步处理着实称得上诡异.而这个诡异从结果上讲,是由js的“单线程”这个特性所导致的. 我曾尝试用“ ...

  2. 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等

      1.引言 对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”(尤其是移动端网络),导致访问错误内容.失败连接等,让用户在互联网上畅游的爽快瞬间消失. 而对于这关键的第一跳,包括鹅厂在内的国 ...

  3. 技术干货:实时视频直播首屏耗时400ms内的优化实践

    本文由“逆流的鱼yuiop”原创分享于“何俊林”公众号,感谢作者的无私分享. 1.引言 直播行业的竞争越来越激烈,进过2018年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验.最近正好在做 ...

  4. Oneinstack 环境安装 Flarum 轻量级论坛程序

    之前做了个论坛,使用的是discuz框架,虽然这个框架已经很成熟,功能也相对较多,但毕竟老框架了,今天尝试用Flarum来搭建一个论坛,Flarum相对来说美观而且速度快 系统环境使用oneinsta ...

  5. JavaScript变量与数据类型详解

    变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问. 变量的作用就是用于存储值. 语法: 声明变量时,总是以关键字var打头.任何情况下都应该这样做.然后给变 ...

  6. MySQL:数据库表的空间回收

    1. 表数据的存储方式 表数据既可以存储在共享表空间,也可以时单独的文件.这个行为由参数 innodb_file_per_table 控制: 设置为 OFF 时,表示表数据存储在共享表空间: 设置为 ...

  7. 使用webmagic爬虫对百度百科进行简单的爬取

    分析要爬取的网页源码: 1.打开要分析的网页,查看源代码,找到要爬取的内容: (选择网页里的一部分右击审查元素也行) 2.导入jar包,这个就直接去网上下吧: 3.写爬虫: package com.g ...

  8. linux下 几个常用makefile模板,亲测可用

    一 生成动态链接库的模板: ####################### # Makefile ####################### # compile and lib parameter ...

  9. java中的http请求的封装(GET、POST、form表单形式)

    目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,Ht ...

  10. css、css3总结

    关于figure元素和figcaption元素的解释与应用: https://www.w3cplus.com/html5/quick-tip-the-right-way-to-use-figure-a ...