- import ThemeContext from "../context/theme_context"
-
- function withTheme(OriginComponent) {
- return (props) => {
- return (
- <ThemeContext.Consumer>
- {
- value => {
- return <OriginComponent {...props} {...value} />
- }
- }
- ThemeContext.Consumer>
- )
- }
- }
-
- export default withTheme
优点:
缺点:
通过React内置的createPortal函数实现
Modal.jsx
- import React, { PureComponent } from 'react'
- import { createPortal } from "react-dom"
-
- export class Modal extends PureComponent {
- render() {
- return createPortal(this.props.children, document.querySelector("#modal"))
- }
- }
-
- export default Modal
App.jsx
- import React, { PureComponent } from 'react'
- import { createPortal } from "react-dom"
- import Modal from './Modal'
-
- export class App extends PureComponent {
- render() {
- return (
- <div className='app'>
- <h1>App H1h1>
- {
- createPortal(<h2>App H2h2>, document.querySelector("#why"))
- }
-
- {/* 2.Modal组件 */}
- <Modal>
- <h2>我是标题h2>
- <p>我是内容, 哈哈哈p>
- Modal>
- div>
- )
- }
- }
-
- export default App
如果希望不渲染这层的div,就可以通过Fragment实现,Fragment 允许你将子列表分组,而无需向 DOM 添加额外节点;
- import React, { PureComponent, Fragment } from 'react'
-
- export class App extends PureComponent {
- constructor() {
- super()
-
- this.state = {
- sections: [
- { title: "哈哈哈", content: "我是内容, 哈哈哈" },
- { title: "呵呵呵", content: "我是内容, 呵呵呵" },
- { title: "嘿嘿嘿", content: "我是内容, 嘿嘿嘿" },
- { title: "嘻嘻嘻", content: "我是内容, 嘻嘻嘻" },
- ]
- }
- }
-
- render() {
- const { sections } = this.state
-
- return (
- <>
- <h2>我是App的标题h2>
- <p>我是App的内容, 哈哈哈哈p>
- <hr />
-
- {
- sections.map(item => {
- return (
- <Fragment key={item.title}>
- <h2>{item.title}h2>
- <p>{item.content}p>
- Fragment>
- )
- })
- }
- >
- )
- }
- }
-
- export default App
StrictMode 是一个用来突出显示应用程序中潜在问题的工具:
StrictMode检查项:
- import React, { PureComponent, StrictMode } from 'react'
- // import { findDOMNode } from "react-dom"
- import Home from './pages/Home'
- import Profile from './pages/Profile'
-
- export class App extends PureComponent {
- render() {
- return (
- <div>
- <StrictMode>
- <Home/>
- StrictMode>
- <Profile/>
- div>
- )
- }
- }
-
- export default App