React - createPortal

什么是createPortal?

注意这是一个API,不是组件,他的作用是:将一个组件渲染到DOM的任意位置,跟Vue的Teleport组件类似。

用法

javascript 复制代码
import { createPortal } from 'react-dom';

const App = () => {
  return createPortal(<div>前端s</div>, document.body);
};

export default App;

参数

  • children:要渲染的组件
  • domNode:要渲染到的DOM位置
  • key?:可选,用于唯一标识要渲染的组件

返回值

  • 返回一个React元素(即jsx),这个元素可以被React渲染到DOM的任意位置

应用场景

  • 弹窗
  • 下拉框
  • 全局提示
  • 全局遮罩
  • 全局Loading

例如 Antd 的 Modal 组件,就是挂载到 body 上的。

案例

全局loading

src/components/Loadingl/index.tsx

javascript 复制代码
import './index.css'

const Loading: React.FC = () => {
   
   return <div className="loading">
     lodaing...
   </div>;
};

export default Loading;

使用createPortal 挂载到body

javascript 复制代码
import { createPortal } from 'react-dom'

const Loading = () => {
  return createPortal(
    <div className='loading'>
      loading...
    </div>,
    document.body
  );
}

export default Loading;

createPortal更灵活,可以挂载到任意位置

相关推荐
一念之间lq2 分钟前
Elpis 第四阶段· Vue3 完成动态组件建设
前端·vue.js
akira09123 分钟前
滚动控制视频播放是如何实现的?GSAP ScrollTrigger + seek 实践 vivo官网案例
前端·产品
用户636836608555 分钟前
前端使用nuxt.js的seo优化
前端
OldBirds5 分钟前
烧脑时刻:Dart 中异步生成器与流
前端·后端
湛海不过深蓝7 分钟前
【echarts】折线图颜色分段设置不同颜色
前端·javascript·echarts
昨晚我输给了一辆AE868 分钟前
关于 react-hook-form 的 isValid 在有些场景下的值总是 false 问题
前端·react.js
xinyu_Jina14 分钟前
Calculator Game:WebAssembly在计算密集型组合优化中的性能优势
前端·ui·性能优化
JustHappy17 分钟前
「2025年终个人总结」🤬🤬回答我!你个菜鸟程序员这一年发生了啥?
前端
BD_Marathon17 分钟前
Vue3_计算属性
javascript·vue.js·ecmascript
啃火龙果的兔子29 分钟前
可以指定端口启动本地前端的npm包
前端·npm·node.js