第十一章 React 封装自定义组件

一、专栏介绍 🌍🌍

欢迎加入本专栏!本专栏将引领您快速上手React,让我们一起放弃放弃的念头,开始学习之旅吧!我们将从搭建React项目开始,逐步深入讲解最核心的hooks,以及React路由、请求、组件封装以及UI(Ant Design)框架的使用。让我们一起掌握React,开启前端开发的全新篇章!

二、什么是自定义组件 🌎🌎

自定义组件是指根据应用需求,自定义的组件。它们可以是有状态的或无状态的,可以接受props并返回JSX或null,并且可以包含生命周期方法、refs、context等等。 自定义组件在React应用中非常常见,因为React的核心思想就是组件化。每一个React页面都是由一个或多个组件构成,组件是构建React应用程序的基石。它们可以封装可重用的UI组件,使代码更加模块化和可维护。 自定义组件可以有很多用途。例如,它们可以创建可重用的UI组件,如按钮、表单、布局等。同时,它们也可以用于封装复杂的业务逻辑,将复杂的业务逻辑抽象为可重用的组件,提高代码的可维护性和可重用性。此外,自定义组件还可以用于实现AOP(面向切面编程),将通用逻辑(如认证、日志)封装到单独的组件中,避免在各个角落重复编写代码。 总之,自定义组件是React中非常重要的概念,它们可以帮助开发者更好地组织和维护代码,提高开发效率和质量。

三、组件需求 🌏🌏

根据需求,需要定义一个组件,该组件根据viewMode属性的不同显示不同的状态。当viewMode为edit时,显示一个标题和输入框,表示编辑状态;当viewMode为view时,显示一个标题和一个内容,表示查看状态。此外,该组件还需要集成原生的input输入框,并具有自己的属性。

四、编写组件源码 🔮🔮

新建文件src/components/CustomInput.tsx

自定义组件首字母一定要大写并且使用驼峰命名方式

InputHTMLAttributes<HTMLInputElement>为input框原生的属性。

import React, { InputHTMLAttributes } from 'react';
import './CustomInput.scss';const CustomInput: React.FC<InputHTMLAttributes<HTMLInputElement> & {label: string | number; // 这里的意思label属性可以是一个字符串也可以是一个数字。viewMode?: 'view' | 'edit'; // 这里的意思是view属性只能是view或者edit字符串}
> = ({ label, viewMode = 'edit', ...props }) => {// view = 'edit' 表示默认值就是editif (viewMode === 'edit') {return (<><div className={'ts-custom-input edit'}><span>{label}:</span><input {...props} /></div></>);}return (<><div className={'ts-custom-input view'}><span className={'title'}>{label}:</span><span className={'content'}>{props.defaultValue}</span></div></>);
};export default CustomInput;

新建文件src/components/CustomInput.scss

.ts-custom-input {width: 100%;height: 26px;line-height: 26px;&.view {.title {color: black;}.content {color: #696767;}}
}

使用组件

import React from 'react';
import CustomInput from './components/CustomInput';function App() {return (<div className="App"><CustomInputlabel="姓名"placeholder="请输入值"viewMode={'edit'}defaultValue={'我是默认值'}onChange={(e) => {console.log('👉👉👉-----------------输入值发生了变化,现在是:', e.target.value);}}/><CustomInput label="姓名" viewMode={'view'} defaultValue={'我是默认值'} /></div>);
}export default App;

效果

五、总结 💿💿

React中自定义组件非常重要、很有必要花时间好好的学学。

自定义组件可以将UI切分成一些独立的、可复用的部件,这样只需专注于构建每一个单独的部件,从而在多个项目中重用代码。这提高了开发效率,降低了维护成本。

组件化开发降低了系统各个功能之间的耦合性,提高了功能内部的聚合性。这使得代码更容易理解和修改,降低了开发复杂度。

自定义组件遵循一定的命名和规范,使得代码更加清晰和易于维护。当需要修改或扩展功能时,只需找到对应的组件进行修改,而不需要在整个项目中搜索和修改相关代码。

自定义组件使得团队成员可以更容易地分工合作,每人负责一个或多个组件的开发和维护。这提高了团队的协作效率,降低了沟通成本。

自定义组件可以接受不同的属性和参数,根据需求进行定制。这使得组件具有很高的灵活性,可以适应各种场景和需求。

自定义组件可以独立地进行测试和调试,这使得问题定位和修复更加容易。同时,组件的独立性也使得自动化测试更加容易实现。

总之,React中自定义组件的重要性在于它们提供了代码重用、降低耦合性、提升可维护性、更好的团队协作、灵活性和易于测试和调试等好处,从而提高了开发效率和质量。

👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年值得收藏的 10 款 iPhone 数据恢复软件评论

iPhone 让您将数字生活装在口袋里。从您所爱之人的照片和视频&#xff0c;到与学校和工作相关的文档&#xff0c;再到重要的备忘录和日历约会&#xff0c;iPhone 内的微型存储芯片可以容纳的数据量是惊人的。 唯一的问题是&#xff0c;很快就会丢失这些数据。一次错误的点击或…

320科技工作室ZEMAX培训通知

一 软件介绍 ZEMAX是一套综合性的光学设计软件。它提供先进的、且符合工业标准的分析、优化、公差分析功能&#xff0c;能够快速准确的完成光学成像及照明设计。 二 培训方式 本次培训全程线上授课, 采用一对一或者一对多方式进行, 以视频方式授课&#xff0c;工程案例讲解&…

WebGL+Three.js入门与实战——给画布换颜色、绘制一个点、三维坐标系

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

紫光展锐T820与飞桨完成I级兼容性测试 助推端侧AI融合创新

近日&#xff0c;紫光展锐高性能5G SoC T820与百度飞桨完成I级兼容性测试&#xff08;基于Paddle Lite工具&#xff09;。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是紫光展锐加入百度“硬件生态共创计划”后的阶段性成果。 本次I级兼容性测试完…

小程序使用Nodejs作为服务端,Nodejs与与MYSQL数据库相连

小程序使用Nodejs作为服务端,Nodejs与MYSQL数据库相连 一、搭建环境二、配置Nodejs三、与小程序交互四、跨域处理/报错处理五、nodejs连接mysql数据库六、微信小程序连接nodejs报错七、小程序成功与服务端相连,且能操作数据库一、搭建环境 新建空文件夹:Win + R进入cmd命令界…

Jenkins Pipeline 脚本优化实践:从繁琐到简洁

引言 在持续集成的过程中&#xff0c;Jenkins Pipeline 是非常关键的一环。它定义了如何自动编译、测试和部署代码。随着项目的不断发展&#xff0c;Pipeline 的复杂性也在不断上升&#xff0c;这就需要我们持续优化 Pipeline 脚本&#xff0c;以提高代码的可读性和维护性。本…

PE硅芯管产品由白色加蓝色条、黑色加蓝色条、颜色可定做

PE硅芯管的产品设计独特&#xff0c;其表面有白色加蓝色条纹或黑色加蓝色条纹等多种颜色可选。这些不同颜色的选择使得管道更加美观&#xff0c;同时也可以根据不同的使用场合和需求进行定制。 除了常规的白色和黑色之外&#xff0c;PE硅芯管还可以根据客户的需求定制其他颜色…

docker部署go gin框架 Windows环境

目录 文章目的是什么 环境介绍 Windows 环境下 docker 部署 go gin 详细步骤 运行容器时因为挂载文件可能会出现的问题 直接部署gin&#xff08;跳过运行容器时因为挂载文件可能会出现的问题&#xff09; 文章目的是什么 假设我们学习了 go 语言&#xff0c;在 Windows(本…

uniGUI学习之UniHTMLMemo1富文本编辑器

1]系统自带的富文本编辑器 2]jQueryBootstarp富文本编辑器插件summernote.js 1]系统自带的富文本编辑器 1、末尾增加<p> 2、增加字体 3、解决滚屏问题 4、输入长度限制问题 5、显示 并 编辑 HTML源代码(主要是图片处理) 1、末尾增加<p> UniHTMLMemo1.Lines…

C# WPF上位机开发(crc校验)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 为了验证数据传输的过程中有没有发生翻转&#xff0c;我们在传输报文的同时一般还会添加一个crc校验。对于modbus协议也是一样&#xff0c;它在数据…

最好的猫粮排行榜前十名有哪些品牌?质量好的主食冻干猫粮分享

为什么越来越多人推荐冻干猫粮喂养呢&#xff1f;主食冻干猫粮究竟是最适应猫饮食习惯的喂养方式还是消费陷阱&#xff1f; 作为一个6年的宠物营养师&#xff0c;我以前接触过很多不同品种的猫咪&#xff0c;一只健康又漂亮的猫咪从表面上就能看出来&#xff01;体型匀称刚好、…

springboot升级到3.2导致mybatis-plus启动报错

在springboot升级到3.2时&#xff0c;服务启动报错 java.lang.IllegalArgumentException: Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String&#xff1a; java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanOb…