1、ReactDOM.createPortal并不直接渲染DOM元素,而是渲染一个React元素,一个绑定好了挂载点的React元素,并且并不随组件引用位置而改变(一般的React元素引用位置在哪就在哪里渲染
    2、方法

    1. createPortal(child,container)

    3、参数

    1. - child 是任何可渲染的Rax子元素,例如一个元素,字符串或Fragment
    2. - container 是一个Dom 元素

    4、Rax 基于 React 的标准,支持在不同容器中渲染,当前最重要的容器即 Weex 和 Web
    1、Weex框架能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持 iOS、安卓、YunOS及Web等多端部署。
    5、createPortal 和render 渲染的区别

    1. //ReactDom.createPortal 渲染
    2. const A = props => {
    3. const div = document.createElement('div')
    4. document.body.appendChild(div)
    5. return ReactDOM.createPortal(<div>gjw</div>, div)
    6. }
    7. ------------------------------------------------------------------
    8. //React.render 渲染
    9. class Ex extends React.Component {
    10. render () {
    11. <A></A>
    12. }
    13. }
    14. ReactDOM.render(<Ex/>, document.body)

    6、ReactDOM.createPortal并不直接渲染DOM元素,而是渲染一个React元素,一个绑定好了挂载点的React元素,并且并不随组件引用位置而改变(一般的React元素引用位置在哪就在哪里渲染)
    ReactDOM.render直接渲染DOM元素,会直接影响页面

    7、使用createPortal

    1. import React, { Component } from 'react';
    2. //引入 createPortal
    3. import { createPortal } from 'react-dom';
    4. class test extends Component {
    5. constructor(props) {
    6. super(props)
    7. // 记录参数 利用window.document
    8. const doc = window.document;
    9. console.log(doc, "---获取整个的document");
    10. // 定义this.node 创建一个div节点
    11. this.node = doc.createElement("div");
    12. // console.log(this.node,'--- 在document里面创建div');
    13. // 当前的body下挂载一个div节点
    14. doc.body.appendChild(this.node)
    15. // console.log(doc.body.appendChild(this.node),'在document.body下面追加一个div');
    16. }
    17. render() {
    18. // 实现createPortal
    19. return createPortal(
    20. <div className='dialog'>
    21. <h3>
    22. Modal
    23. </h3>
    24. </div>, this.node
    25. )
    26. }
    27. // willUnmount中实现订阅和取消订阅
    28. componentWillUnmount() {
    29. window.document.body.removeChild(this.node)
    30. }
    31. }
    32. export default test;