React中插槽处理机制

news2024/9/26 3:22:27

React中插槽处理机制

需求:假如底部可能有按钮,根据需求判断需要展示或不展示,或者需要展示不同的按钮或者其他DOM
解决1:需要的按钮可以在组件中写死,后期基于传递进来的属性来进行判断
解决2:我们也可以把按钮的区域预留出来,但是内容不写,内容让调用的组件的时候,把东西传递进来【传递的是结构】

<DemoOne>
   <div>1</div>
   <div>2</div>
</DemoOne>

组件中的两个div基于props.children获取传递的子节点信息
这一套机制就是插槽机制
调用组件的时候,基于上闭合调用方式把插槽信息【子节点信息】,传递给组件,组件内部渲染即可

例子1(匿名插槽):
传进来的子节点若只有一个展示在组件头部,若两个则第一个节点在组件头部,第二个节点在组件底部


//父组件
 <div>
            <h1>没有children</h1>
            <DemoOne/>
            <h1>一个节点</h1>
            <DemoOne>
                <div>1</div>
            </DemoOne>
            <h1>两个节点</h1>
            <DemoOne>
                <div>1</div>
                <div>2</div>
            </DemoOne>
</div>
//子组件
const DemoOne=(props)=>{
    let {x,children}=props
    //使用React中的方法将children转换为数组
    children=React.Children.toArray(children)
    return(
        <div>
            {children[0]}
            <div>DomeOne</div>
            {children[1]}
        </div>
    )
}

运行结果:
在这里插入图片描述
缺点:匿名插槽,两个节点的顺序不能改变,必须按照指定顺序

例子2(具名插槽):

//子组件
const DemoOne=(props)=>{
    let {x,children}=props
    //使用React中的方法将children转换为数组
    children=React.Children.toArray(children)
    let headerSlot=[],
        footerSlot=[],
        defaultSlot=[]
    children.forEach(child=>{
        let {slot}=child.props
        console.log(slot,child)
        if(slot==='header'){
            headerSlot.push(child)
        }else if(slot==='footer'){
            footerSlot.push(child)
        }else {
            defaultSlot.push(child)
        }
    })
    return(
        <div>
            {headerSlot}
            <div>DomeOne</div>
            {defaultSlot}
            {footerSlot}
        </div>
    )
}

//父组件中调用
<DemoOne>
     <div slot='footer'>我在底部</div>
      <div slot='header'>我在头部</div>
      <div>我是默认</div>
</DemoOne>

在这里插入图片描述
具名插槽把筛选出的插槽信息放在指定位置进行渲染
目的:在调用组件的,传递信息的时候,可以不用

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

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

相关文章

Nacos安装指南(Windows环境)

Windows安装 开发阶段采用单机安装即可。 1.下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载页&#xff1a;https:…

基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Matlab学习笔记(不定期更新)

MATLAB学习笔记 个人上了一点网课之后&#xff0c;感觉MATLAB自带的学习指导真好用 添加所需要的变量 >> a 1 a 1 >> ans sin(a) ans 0.8415edX提供的各项MATLAB函数 遇到不会使用的函数怎么办&#xff1f; 通过在搜索文档里键入自己需要搜索的函数&#xff…

数据结构---AVL树

AVL树 AVL树的概念AVL树节点的定义AVL树的插入源代码 AVL树的概念 二叉搜索树虽然可以缩短查找的效率&#xff0c;但是&#xff0c;如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率就会变低。因此&#xff0c;两…

Java移除链表元素

目录 1.题目描述 2.题解 题解1 题解2 1.题目描述 给你一个链表的头节点 head 和一个整数 val&#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 输入&#xff1a;head [1,2,6,3,4,5,6]&#xff0c;val 6 输出&#xff1a;…

饥饿游戏搜索算法(HGS)(含java实现代码)

Hunger games search: Visions, conception, implementation, deep analysis, perspectives, and towards performance shifts 期刊:Expert Systems With Applications SCI1区 主体框架 public HGS(){initialize();calculateFitness();sortTheFitness();calculateHungry();for…

分享团队在软件开发中用到的神仙工具

目前使用的是JNPF框架。 技术栈上使用的SpringBoot、SpringCloud、Spring Web、MyBatis、Swagger、Vue、Element。 这些都是比较主流的技术&#xff0c;无论是技术层面的先进性还是学习难度都是比较低的&#xff0c;目前网络上有大量可供参考学习的资料。 并且它支持前后端分离…

中文转拼音(带音调)

导入maven依赖 <!--导入pinyin4j库--><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version></dependency>demo如下&#xff1a; import com.github.stuxuhai.jpiny…

方案:数智化视频AI技术为智慧防汛筑基,构建防汛“数字堤坝”

一、背景分析 在过去的几年中&#xff0c;全球气候变化导致许多城市在雨季面临严重的洪涝灾害。这些灾害不仅对人们的生命安全和财产造成威胁&#xff0c;也影响了城市的正常运转。传统的防汛手段主要依赖人力监控和应急指挥&#xff0c;但存在响应速度慢、处理效率低等问题。…

【操作系统】进程控制与进程通信

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 操作系统 一、进程控制1.1 什么是进程控制1…

vue element 搜索框根据后台的接口实现模糊查询 + 分页特殊处理+重置表格

模糊查询效果图 1.配置接口 search: "/api/goods/search", //搜索接口/goods/search 2.get接口 search(params) { return axios.get(base.search, { params });//后台传参 再写这个params }, 3.异步请求接口 // 搜索接口async search(search){let res await this…

基于Java社区生鲜电商平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

离子风刀的特点以及应用领域

静电消除器离子风刀是一种用于消除静电的设备&#xff0c;它通过在空气中产生离子&#xff0c;将静电从物体表面或人体上释放掉&#xff0c;以保护电子设备和人体免受静电的损害。 离子风刀的特点包括&#xff1a; 1、高效&#xff1a;离子风刀能够快速消除静电&#xff0c;提…

CRM软件系统趣味性——游戏化销售管理

对于企业销售来说&#xff0c;高薪酬也伴随着更高的压力与挑战。高强度的单一工作会让销售人员逐渐失去对工作的兴趣&#xff0c;导致售状态缺少动力和激情&#xff0c;工作开展愈加困难。您可以通过CRM系统进行游戏化销售管理&#xff0c;让销售人员重新干劲满满。 游戏并不是…

SkyWalking使用讲解

文章目录 1 SkyWalking1.1 简介1.2 如何选择1.3 Skywalking架构1.4 服务端搭建1.4.1 下载安装包1.4.2 配置修改1.4.2.1 config/application.yml1.4.2.2 webapp/webapp.yml 1.4.3 启动服务 1.5 客户端搭建1.6 数据持久化1.6.1 修改配置文件1.6.2 添加MySQL的jdbc依赖 1.7 日志监…

Java面经整理(1)

一)Java中支持多继承吗,为什么? 答案:在JAVA中是不支持多继承的,原因是多继承会存在菱形继承的问题 菱形继承: 1)菱形继承也被称之为是钻石继承,是一种在JAVA面向对象编程的时候遇到的一个可能出现的继承问题; 2)假设JAVA支持多继承,那么就有可能一个类D继承两个不同的类…

一文总结提示工程框架,除了CoT还有ToT、GoT、AoT、SoT、PoT

夕小瑶科技说 原创 编译 | 谢年年 大语言模型LLM被视为一个巨大的知识库&#xff0c;它可以根据你提出问题或陈述的方式来提供答案。就像人类可能会根据问题的不同提供不同的答案一样&#xff0c;LLM也可以根据输入的不同给出不同的答案。因此&#xff0c;你的问题或陈述方式就…

视频太大怎么压缩变小?把视频变小这样做

随着科技的不断发展&#xff0c;视频已经成为了我们日常生活中不可或缺的一部分&#xff0c;然而&#xff0c;有时候我们会遇到视频体积太大&#xff0c;无法上传或者传输的问题&#xff0c;那么&#xff0c;如何将过大的视频压缩变小呢&#xff1f;下面就给大家分享几个方法&a…

如何检测出鸡蛋壳上的裂缝(个人想法,正确性有待研究)

问题 老师在课上提出了一个项目&#xff0c;是关于如何通过某些方式来找出有裂缝的鸡蛋壳&#xff0c;但是鸡蛋壳上的裂缝非常小&#xff0c;问有什么办法处理。 想法 通过瞬间增大气压使得有裂缝的鸡蛋破裂。 具体实施 在图中&#xff0c;我们可以看到鸡蛋受外界气压的力&…

TS自动监视ts文件修改

当我们对ts文件进行编译后会生成js文件 当我们在ts文件中进行修改时&#xff0c;js文件并不会进行变化 那我们该如何监视ts文件中的变化呢&#xff1f;可以在控制台中输入如下命令&#xff1a; tsc 文件名.ts -w 这下在ts中代码改变就可以被监听&#xff08;这里报错是因为同时…