Vue和React高级特性之传送

news2024/11/25 22:32:24

一、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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix 使用同一ODBC监控不同版本MySQL

一、ODBC介绍 ODBC是Open Database Connect 即开发数据库互连的简称&#xff0c;它是一个用于访问数据库的统一界面标准。ODBC引入一个公共接口以解决不同数据库潜在的不一致性&#xff0c;从而很好的保证了基于数据库系统的应用程序的相对独立性。ODBC 概念由 Microsoft 开发&…

【AI视野·今日Robot 机器人论文速览 第五十三期】Thu, 12 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 12 Oct 2023 Totally 25 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Pixel State Value Network for Combined Prediction and Planning in Interactive Environments Authors Sascha Rosbach, St…

Python学习记录——이십이 Bytes和字符集编码

文章目录 根据ANSI标准&#xff0c;各国对于各国的文字有自己的编写方法&#xff0c;中国发展的就是gbk编码&#xff0c;国际上有个unicode码&#xff0c;适用于所有语言&#xff0c;依据这个标准出来utf-8标准。像ascii&#xff0c;我们见到的就是8个bit位&#xff0c;总共存放…

SOP8封装 NV400F的语音芯片在电动车充电桩的应用

充电桩作为电动汽车的配套设施&#xff0c;为其提供充电服务&#xff0c;功能类似加油站里的加油机。一般安装在公共建筑和居民小区内供电动车车主使用。随着国家对节能减排和保护环境越来也重视。在城市中&#xff0c;新能源的电动车得到了空前的发展&#xff0c;电动汽车零污…

二十二、【形状工具组】

文章目录 基础图形多边形直线工具自定义形状工具 形状工具组画的图形是矢量图形&#xff0c;在放大和缩小后像素不变看起来不会模糊&#xff0c;位图和矢量图形的存储方式不一样&#xff0c;位图的存储方式是按各个像素的数据来进行存储的&#xff0c;而矢量图形是根据算法来进…

蓝桥杯——递增序列和货物摆放

文章目录 前言一、递增序列二、货物摆放总结 前言 多多练习 一、递增序列 解题思路&#xff1a; 代码实现&#xff1a; 当然我的这个代码也不是很正确 发这道题就是向大家集思广益&#xff0c;我的就只作为一个参考啦~ #include <stdio.h> #include <stdlib.h>…

【数据结构】排序--插入排序(希尔排序)

目录 一 基本思想 二 直接插入排序 三 希尔排序 一 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 。 实际中我们玩扑克牌时&#xff0c;就用了插入排序的思想 二…

前端 js导出excel

一、导出效果 二、导出代码 download() {let data [{name: aaaa,age: 10,address: 广东,phone: 1,wechart: 1},{name: bbbb,age: 11,address: 广西,phone: 2,wechart: 2},{name: cccc,age: 12,address: 山东,phone: 3,wechart: 3}]if (!data.length) {this.$Message.warnin…

内存泄漏检测组件的实现

通过宏定义来包装 malloc 和 free 函数&#xff0c;以便在每次内存分配和释放时记录相关信息&#xff0c;如文件名和行号。这使得你能够跟踪哪个函数在哪里分配和释放内存。 #define _GNU_SOURCE #include <dlfcn.h>#include <stdio.h> #include <stdlib.h>…

LaTeX 公式与表格绘制技巧

LaTeX 公式与绘图技巧公式基本可以分为 单一公式单一编号单一公式按行编号单一公式多个子编号单一公式部分子编号分段公式现在给出各自的代码单一公式单一编号 公式1&#xff1a;equationaligned\begin{equation}\begin{aligned}a&bc\\b&a2\\c&b-3\end{aligned}\en…

Windows terminal美化工具Oh-My-Posh

1、前言 windows电脑上的终端工具Window terminal大家应该都不陌生&#xff0c;这里介绍一款美化工具&#xff0c;从此告别windows terminal的黑与白。 2、Oh-My-Posh Oh My Posh 是一个命令行提示工具&#xff0c;通常用于美化和自定义终端提示符。它允许用户创建自定义的终…

Windows:Arduino IDE 开发环境配置【保姆级】

参考官网&#xff1a;Arduino - Home Arduino是一款简单易学且功能丰富的开源平台&#xff0c;包含硬件部分&#xff08;各种型号的Arduino开发板&#xff09;和软件部分&#xff08;Arduino IDE)以及广大爱好者和专业人员共同搭建和维护的互联网社区和资源。 Arduino IDE软件…

【玩机】如何修改iPhone充电提示音!最详细简单保姆级教程~ 学费了可替换任意音频做你的专属充电提示音!——后厂村路灯

其实方法很简单&#xff0c;利用快捷指令&#xff0c;获得base64 位的音频文本&#xff0c;然后再充电时播放即可。 视频教程 【玩机】如何修改iPhone充电提示音&#xff01;最详细简单保姆级教程 具体操作如下&#xff1a; 1.首先&#xff0c;网上找到需要设定的音频&#xf…

深度学习中的一些概念

回归问题 在深度学习中&#xff0c;回归问题是一种机器学习任务&#xff0c;其目标是预测连续数值的输出。与分类问题不同&#xff0c;其中目标是将输入数据分为不同的类别&#xff0c;回归问题的目标是根据输入数据来预测一个连续的数值。回归问题通常涉及到建立一个数学模型…

mysql面试题53:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录 可以按照以下步骤进行: 确保…

rust: function

///file: nestd.rs ///ide: RustRover 233.8264.22 /// /// /// /***自定义函数*/ pub fn function() {println!("called my::nested::function()"); }#[allow(dead_code)] fn private_function() {println!("called my::nested::private_function()"); }/…

vue-rouer 路由

安装/配置: //进入项目目录:(在搭建项目的时候安装了) cnpm install vue-router --save旧版路由 需要自己配置 //项目中载入,一般在main.js中载入:import VueRouter from vue-routerVue.use(VueRouter)let router new VueRouter({}) //其中配置路径和地址//在Vue中引入:n…

YB4058是一款经济高效、完全集成的高输入电压单电池锂离子电池充电器

高输入电压充电器支持I2C和OVP保护 概述&#xff1a; YB4058是一款经济高效、完全集成的高输入电压单电池锂离子电池充电器。充电器使用了锂离子电池所需的CC/CV充电曲线。充电器可接受高达27V的输入电压&#xff0c;但当输入电压超过OVP时禁用阈值&#xff0c;通常为6.8V&am…

【神印王座】悲啸洞穴中隐藏的人有多强?实力不如魔神皇,靠一绝招魔神皇都怕

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 神印王座动漫现在已经更到龙皓晨等人深入魔族地界抵达悲啸洞穴的阶段。而刚到悲啸洞穴龙皓晨等人就被悲啸声所阻&#xff0c;龙皓晨生怕队友进入其中后有人会死亡&#xff0c;所以决定自己一个人进去探索。而小…

树模型(2)随机森林

随机森林属于集成学习中bagging算法的延展&#xff0c;所以先来介绍一下集成学习。 **集成学习&#xff1a;**对于训练数据集&#xff0c;我们通过训练一系列个体学习器&#xff0c;并通过一定的结合策略将它们组合起来&#xff0c;形成一个强有力的学习器 **个体学习器&…