Vue和React高级特性之传送_react teleport-程序员宅基地

技术标签: react.js  前端  vue.js  React  

一、Vue中的Teleport

是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去

试想下面这样的 HTML 结构:

<div class="outer">
  <h3>Tooltips with Vue 3 Teleport</h3>
  <div>
    <MyModal />
  </div>
</div>

接下来我们来看看 的实现:

<script setup>
import {
     ref } from 'vue'

const open = ref(false)
</script>

<template>
  <button @click="open = true">Open Modal</button>

  <div v-if="open" class="modal">
    <p>Hello from the modal!</p>
    <button @click="open = false">Close</button>
  </div>
</template>

<style scoped>
.modal {
    
  position: fixed;
  z-index: 999;
  top: 20%;
  left: 50%;
  width: 300px;
  margin-left: -150px;
}
</style>

在这里插入图片描述
提供了一个更简单的方式来解决此类问题,让我们不需要再顾虑 DOM 结构的问题。让我们用 改写一下 :

<button @click="open = true">Open Modal</button>

<Teleport to="body">
  <div v-if="open" class="modal">
    <p>Hello from the modal!</p>
    <button @click="open = false">Close</button>
  </div>
</Teleport>

禁用 Teleport
在某些场景下可能需要视情况禁用 。举例来说,我们想要在桌面端将一个组件当做浮层来渲染,但在移动端则当作行内组件。我们可以通过对 动态地传入一个 disabled prop 来处理这两种不同情况。.

<Teleport :disabled="isMobile">
  ...
</Teleport>

多个 Teleport 共享目标
一个可重用的模态框组件可能同时存在多个实例。对于此类场景,多个 组件可以将其内容挂载在同一个目标元素上,而顺序就是简单的顺次追加,后挂载的将排在目标元素下更后面的位置上。

<Teleport to="#modals">
  <div>A</div>
</Teleport>
<Teleport to="#modals">
  <div>B</div>
</Teleport>

渲染的结果为:
<div id="modals">
  <div>A</div>
  <div>B</div>
</div>

二、React中的Portal

index.js

import React from 'react'

import RenderPropDemo from './RenderPropDemo'

class AdvancedUse extends React.Component {
    
    constructor(props) {
    
        super(props)
    }
    render() {
    
        return <div>
            <PortalsDemo>Modal 内容</PortalsDemo>
        </div>
    }
}

export default AdvancedUse

PortalsDemo.js

import React from 'react'
import ReactDOM from 'react-dom'
import './style.css'

class App extends React.Component {
    
    constructor(props) {
    
        super(props)
        this.state = {
    
        }
    }
    render() {
    
        // // 正常渲染
        // return <div className="modal">
        //     {this.props.children} {/* vue slot */}
        // </div>

        // 使用 Portals 渲染到 body 上。
        // fixed 元素要放在 body 上,有更好的浏览器兼容性。
        return ReactDOM.createPortal(
            <div className="modal">
              {
    this.props.children}  {
    /* 类似vue slot */}
            </div>,
            document.body // DOM 节点 第二参数,表示要渲染到什么地方去
        )
    }
}

export default App

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44582045/article/details/133805391

智能推荐

c++保留到小数点后n位_保留n位有效数字_c++保留小数点后几位怎么弄-程序员宅基地

文章浏览阅读2k次,点赞17次,收藏14次。结果自动的进行了四舍五入分别详细讲解上面的四种方法,包括它们的原理、异同以及推荐使用的情况。fixedfixedsetf()综上所述,为了确保输出的一致性和准确性,推荐使用第一种或第二种方法,因为它们明确指定了固定点表示法和精度,能够更好地控制输出的格式。_c++保留小数点后几位怎么弄

RK3568驱动指南|第七期-设备树-第57章 实例分析:中断_rk interrupts-程序员宅基地

文章浏览阅读496次。在gpio0的中断控制器为gic,在gic节点中#interrupt-cells属性被设置为3,这也就是为什么在gpio0节点中interrupts 属性有三个值,而ft5x06的中断控制器为gpio0,在gpio0节点中#interrupt-cells属性被设置为2,所以ft5x06节点的interrupts 属性只有两个值。中断信号源节点(例如设备节点或其他中断源节点)中的 interrupt-parent 属性用于指定中断信号源所属的中断控制器节点。中断信号源是产生中断的设备或其他中断源节点。_rk interrupts

Linux0.11 信号(十二)_linux0.11 do_signal-程序员宅基地

文章浏览阅读482次。信号机制是 Linux 0.11 为进程提供的一套"局部的类中断机制",即在进程执行的过程中,如果系统发现某个进程接收到了信号,就暂时打断进程的执行,转而去执行该进程的信号处理程序,处理完毕后,再从进程"被打断"之处继续执行。_linux0.11 do_signal

NUC980编译错误,arm-linux-gcc: Command not found_arm-linux-gcc未找到命令怎么解决-程序员宅基地

文章浏览阅读843次。arm-linux-gcc: Command not found_arm-linux-gcc未找到命令怎么解决

11 1 块元素div的定义 2 常见的块元素 3 块元素的用途 4 内联元素,行内元素,span 5 内联元素和块元素的用途 6 a元素超链接的用法 7 p元素不可以包含任何其他的块元素...-程序员宅基地

文章浏览阅读98次。123456下列写法错误7下列写法错误转载于:https://www.cnblogs.com/anvivi/p/9695592.html_元素另外一个常见的用途是

软件测试周刊(第15期):将军赶路 不追小兔-程序员宅基地

文章浏览阅读1.9k次。这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。本周刊开源(GitHub: SoftwareTestingWeekly ),欢迎提交 issue,投稿或推荐软件测试相关的内容。科普将军赶路 不追小兔前几天在网上看到一句话,「将军赶路,不追小兔」,言简意赅,余音绕梁,发人深省。类似的还有:将军赶路,不打野兔。 将军赶路,不打小鬼。 将军有剑,不斩苍蝇。将军好忙。「将军」是一种身份的象征,他带领着军队是要打硬仗的,有远大的目标,「赶路」才是当前..

随便推点

matlab 求倾斜边缘,MTF的倾斜边缘法计算方法-程序员宅基地

文章浏览阅读1.2k次。MTF的倾斜边缘法计算方法简介光学系统性能的衡量方法有很多,常见的有点扩散函数法、瑞利判断法、点列图法、光学传递函数(MTF)法等,其中MTF法在光学系统和镜头加工制造中使用最为广泛。MTF曲线真实的反映了成像系统将物方信息传递到像方的能力。MTF曲线的横坐标一般是cycle/mm或者linepair/mm[1][11],纵坐标是反映对比度传递特性的像/物方调制度的比值。MTF的计算方法有很多,比..._matlab斜边超采样得到esf

RT-Smart ELF 应用程序加载运行过程分析-程序员宅基地

文章浏览阅读493次。在用户态应用程序处理的任务中,elf 加载运行是一个比较重要的步骤,下面就分析一下在 rt-smart 操作系统中,想要将一个应用程序运行起来要经过哪些步骤。ELF 格式介绍ELF 代表 Executable and Linkable Format。它是一种对可执行文件、目标文件和库使用的文件格式。它在 Linux 下成为标准格式已经很长时间,ELF 一个特别的优点在于,同一文件格式可以用于内核支..._rtt5.0 elf文件

Android动态设置约束布局的链条关系_android动态设置constraintset-程序员宅基地

文章浏览阅读460次,点赞9次,收藏9次。今天项目有需要动态设置ConstrainLayout这个布局的需求,在网上搜了一下,记录一下大致的流程和可能出现问题的点startID:要约束的目标控件id。startSide:要约束的目标控件的边界。endID:约束条件控件的id。endSide:endID的边界。int margin:间距。举个例子比如将view_divider的左边约束于tv_company_name的左边,就可以写成如果要相对父布局设置约束,可以写成要设置间距,添加一个margin参数即可其他方向的约束同理。 constra_android动态设置constraintset

短时间让大家对C++ STL有所学习_c++stl需要学吗-程序员宅基地

文章浏览阅读341次。STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其他组件相区别,在本书中STL算法以后接一对圆括弧的方式表示,例如sort()。STL另一个重要特性是它不是面向对象的。为了具有_c++stl需要学吗

【中二少年工具箱】——svga预览工具-程序员宅基地

文章浏览阅读3.5k次,点赞11次,收藏9次。前面有篇文章讲过基于echarts的大屏可视化一些基础概念,其中提到和动画相关的插件有:lottie、gsap、svga等,本篇文章的主题是svga,但不是技术硬文,只是向大家介绍我最近写的一款工具——svga预览工具。正版软件会一直免费,所以请大家放心使用博主开发的正版软件。如果软件被破解,绕过通行码直接登录,后续对宿主机造成一切后果,请使用者自行承担。大家多多支持博主的公众号,新开小号,需要多多关注,拜谢大家:或者。_svga预览

mqttx测试工具安装教程_mqttx-setup-程序员宅基地

文章浏览阅读8.2k次。下载软件:https://github.com/emqx/MQTTX/tags直接双击运行即可:新建连接:连接成功:_mqttx-setup

推荐文章

热门文章

相关标签