iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React实现类似于Vue中的插槽的项目实践
  • 857
分享到

React实现类似于Vue中的插槽的项目实践

2024-04-02 19:04:59 857人浏览 安东尼
摘要

目录搭建项目实现方式1实现方式2最终效果展示最近刚开始接触React,感觉React比Vue更灵活一些,但是感觉代码确实维护的时候可读性也没有Vue好(可能是因为我太菜了),Vue中

最近刚开始接触React,感觉React比Vue更灵活一些,但是感觉代码确实维护的时候可读性也没有Vue好(可能是因为我太菜了),Vue中很多都是自己的api, 看到这个api就知道想要实现的是什么功能,但是react 需要自己去读一下代码或者有好的代码注释习惯更好。

比如 Vue 中有一个插槽的概念,可以任意放置内容,那么灵活的 React要怎么实现这个功能呢,这篇文章主要就是记录一下“React实现类似于Vue中的插槽的效果”

搭建项目

// 创建项目
npx create-react-app my-app --template typescript

// 运行项目
yarn start
  • 首先,我们需要将代码中的一些无用代码都删除掉,只留下index.tsx 和 App.tsx 即可;

  • 新建 react-slot 文件夹,文件夹内新建 index.tsx;

  • 新建 NavBar 组件和 navbar.CSS 样式文件;

    完成之后,结构如下:

实现方式1

使用 props.children

// NavBar.tsx

import React from 'react'
import './navbar.css'

type Props = {
  children: any[]
}
const NavBar = (props:Props) => {
  return (
    <div className='navbar-container'>
      <div className='navbar-left'>
        {props.children[0]}
      </div>
      <div className='navbar-center'>
        {props.children[1]}
      </div>
      <div className='navbar-right'>
        {props.children[2]}
      </div>
    </div>
  )
}

export default NavBar
// index.tsx

import React from 'react'
import NavBar from './NavBar'

const ReactSlot = () => {
  return (
    <div>
      <NavBar>
        <div>left---这里内容可以随意填充</div>
        <div>center---这里内容可以随意填充</div>
        <div>right---这里内容可以随意填充</div>
      </NavBar>
    </div>
  )
}

export default ReactSlot

实现方式2

实现方式1比较好理解,但是存在一个缺陷——三个子元素缺1不可,并且顺序不可以错误,代码不宜读;

实现方式2则是通过传值的方式,将 jsx 代码传递过去,可以一一对应,并且使用 leftSlot 等语义化的词使得功能更易理解;

// NavBar.tsx

import React, { Reactnode } from 'react'
import './navbar.css'

type Props = {
  leftSlot: ReactNode
  centerSlot: ReactNode
  rightSlot: ReactNode
}
const NavBar = (props:Props) => {
  return (
    <div className='navbar-container'>
      <div className='navbar-left'>
        {props.leftSlot}
      </div>
      <div className='navbar-center'>
        {props.centerSlot}
      </div>
      <div className='navbar-right'>
        {props.rightSlot}
      </div>
    </div>
  )
}

export default NavBar
// index.tsx

import React from 'react'
import NavBar from './NavBar'

const ReactSlot = () => {
  return (
    <div>
      <NavBar 
        leftSlot={<div>left---这里内容可以随意填充</div>}
        centerSlot={<div>center---这里内容可以随意填充</div>}
        rightSlot={<div>right---这里内容可以随意填充</div>}
      ></NavBar>
    </div>
  )
}

export default ReactSlot

最终效果展示

上面两种实现方式都是使用这份 css 样式

// navbar.css

.navbar-container {
  display: flex;
  height: 50px;
  flex-direction: row;
  text-align: center;
  line-height: 50px;
}

.navbar-left {
  width: 20%;
  background-color: plum;
}

.navbar-center {
  width: 60%;
  background-color: bisque;
}
.navbar-right {
  width: 20%;
  background-color: lavender;
}

两种实现方式的页面效果都一样,如下图所示:

到此这篇关于React实现类似于Vue中的插槽的项目实践的文章就介绍到这了,更多相关React 插槽内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React实现类似于Vue中的插槽的项目实践

本文链接: https://www.lsjlt.com/news/149561.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React实现类似于Vue中的插槽的项目实践
    目录搭建项目实现方式1实现方式2最终效果展示最近刚开始接触React,感觉React比Vue更灵活一些,但是感觉代码确实维护的时候可读性也没有Vue好(可能是因为我太菜了),Vue中...
    99+
    2024-04-02
  • React中实现插槽效果的方案详解
    目录React实现插槽children实现插槽props实现插槽React实现插槽 在开发中,我们抽取了一个组件,但是为了让这个组件具备更强的通用性,我们不能将组件中的内容限制为固定...
    99+
    2024-04-02
  • Springboot+redis+Vue实现秒杀的项目实践
    目录1、Redis简介2、实现代码3、启动步骤4、使用ab进行并发测试5、线程安全6、总结7、参考资料1、Redis简介 Redis是一个开源的key-value存储系统。 Redi...
    99+
    2022-11-13
    Springboot+redis+Vue 秒杀 Springboot redis秒杀
  • Vue插槽的实现原理是什么
    这篇文章主要介绍“Vue插槽的实现原理是什么”,在日常操作中,相信很多人在Vue插槽的实现原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue插槽的实现原理是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • TypeScript在React项目中的使用实践总结
    序言 本文会侧重于TypeScript(以下简称TS)在项目中与React的结合使用情况,而非TS的基本概念。关于TS的类型查看可以使用在线TS工具👉TypeScri...
    99+
    2024-04-02
  • Vite+React+TypeScript手撸TodoList的项目实践
    目录布局与样式创建工程定义全局数据类型实现步骤源码地址布局与样式 一个TodoList长什么样子相信无需多言: 上样式: src/TodoList.css .td-wrapper ...
    99+
    2024-04-02
  • react+ts实现简单jira项目的最佳实践记录
    练手的一套项目 react+ts 虽然内容较少,但是干货挺多,尤其是对hooks的封装,ts的泛型的理解,使用更上一层楼 项目代码:https://gitee.com/fine509...
    99+
    2024-04-02
  • vue+jsplumb实现工作流程图的项目实践
    最近接到一个需求——给后台开发一个工作流程图,方便给领导看工作流程具体到哪一步。 先写了一个demo,大概样子如下: 官网文档Home | jsPlumb ...
    99+
    2024-04-02
  • React项目中应用TypeScript的实现
    目录一、前言 二、使用方式 无状态组件 有状态组件 受控组件 三、总结 一、前言 单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架...
    99+
    2024-04-02
  • VUE实现一个简易老虎机的项目实践
    目录简单分析下先看看效果htmljs部分总结今天突然要做一个竖直滚动老虎机,可以设置中奖位置,以及中奖回调,然后再带点常规的滚动动画,还是有点意思,和之前的转盘抽奖有点类似,有兴趣可...
    99+
    2024-04-02
  • 前端项目中的Vue、React错误监听怎么实现
    本篇内容介绍了“前端项目中的Vue、React错误监听怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、 Vue 错误监听题目:如何...
    99+
    2023-06-30
  • vue mixins代码复用的项目实践
    目录导语:场景:1. 代码里有很多当前组件需要的纯函数,methods过多2. 举个例子你有一个组件需要抛出两个数据,直接的v-model不适用。需要采用$emit方法3. 同理,可...
    99+
    2024-04-02
  • Oracle中实现类似于Mysql中的Field()函数功能
    目录理论知识1. mysql中的Filed() 函数2. oracle中的Decode()函数3. Oracle中的row_number实战演练Mysql 的 Filed使用Oracle的Decodeoracle的row...
    99+
    2023-06-08
    Oracle中实现实现类似Field()函数 Oracle decode() Oracle row_number
  • vue利用sync语法糖实现modal弹框的项目实践
    用过vue的开发者都知道vue是组件化开发的一个框架,基于组件化的原则,很多时候我们开发的时候都会把像modal、drawer这种弹框,抽屉类的组件作为一个单独的组件分出去,然后在在...
    99+
    2024-04-02
  • vue项目中使用websocket的实现
    什么是websocket? “WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数...
    99+
    2024-04-02
  • Nginx实现负载均衡的项目实践
    目录一、Nginx介绍二、Nginx特点三、Nginx负载均衡3.1 认识 upstream 模块3.2 Nginx负载均衡策略3.3 Nginx负载均衡实例总结一、Nginx介绍 ...
    99+
    2024-04-02
  • Vue实现插槽下渲染dom字符串的使用
    目录前言需求v-htmlv-outerHTML前言 Vue插槽想必大家都不陌生了,它可以在使用组件的时候决定组件的一部分内容如何渲染。但我最近遇到个需求需要将 dom 字符串插入到插...
    99+
    2023-05-16
    Vue 渲染dom字符串 Vue 渲染dom
  • SpringBoot实现扫码登录的项目实践
    目录一、首先咱们需要一张表二、角色都有哪些三、接口都需要哪些?四、步骤五、疯狂贴代码Spring Boot中操作WebSocket一、首先咱们需要一张表 这表是干啥的呢?就是记录一下...
    99+
    2024-04-02
  • 基于Vite2.x的Vue 3.x项目的搭建实现
    创建 Vue 3.x 项目 npm init @vitejs/app my-vue-app --template 引入 Router 4.x npm install...
    99+
    2024-04-02
  • mysql如何实现类似于oracle的merge语句
    小编给大家分享一下mysql如何实现类似于oracle的merge语句,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 定期更新一个表A,但是表的数据来自于另一张表B。 A表和B表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作