[react]15、Portals、Fragment、Stric

2021-11-11  本文已影响0人  史记_d5da

1、Portals

Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案
ReactDOM.createPortal(child, container )

import React, { PureComponent } from 'react'
import ReactDOM from 'react-dom'
class Modal extends PureComponent {
    render() {
        return ReactDOM.createPortal(
            this.props.children,
            document.getElementById("modal")
        )
    }
}

class Home extends PureComponent {
    render () {
        return (
            <div>
                <h2>Home</h2>
                <Modal> <h2>Title</h2> </Modal>
            </div>
        )
    }
}
export default class App extends PureComponent {
    render() {
        return (
            <div> <Home /> </div>
        )
    }
}

2、Fragment

React 中的一个常见模式是一个组件返回多个元素。Fragments 允许你将子列表分组,而无需向 DOM 添加额外节点
1、用法

class Columns extends React.Component {
  render() {
    return (
      <React.Fragment>
        <td>Hello</td>
        <td>World</td>
      </React.Fragment>
    );
  }
}

2、短语法

class Columns extends React.Component {
  render() {
    return (
      <>
        <td>Hello</td>
        <td>World</td>
      </>
    );
  }
}

3、带 key 的 Fragments

function Glossary(props) {
  return (
    <dl>
      {props.items.map(item => (
        // 没有`key`,React 会发出一个关键警告
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </dl>
  );
}

3、StrictMode

StrictMode 是一个用来突出显示应用程序中潜在问题的工具。与 Fragment 一样,StrictMode 不会渲染任何可见的 UI。它为其后代元素触发额外的检查和警告。
检查的内容:

import React, { PureComponent, StrictMode } from 'react'
class Home extends PureComponent {
    constructor(props) {
        super(props)
        console.log("constructor Home")
    }
    UNSAFE_componentWillMount() {
        console.log("Home -- componentWillMount")
    }
    render() {
        return (
            <div>Home</div>
        )
    }
}
export default class App extends PureComponent {
    render() {
        return (
            <div>
                <StrictMode>
                    <Home />
                </StrictMode>
            </div>
        )
    }
}
上一篇 下一篇

猜你喜欢

热点阅读