第十一章 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.pswp.cn/news/215027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215027.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【NLP】RAG 應用中的調優策略

? 檢索增強生成應用程序的調優策略 沒有一種放之四海而皆準的算法能夠最好地解決所有問題。 本文通過數據科學家的視角審視檢索增強生成&#xff08;RAG&#xff09;管道。它討論了您可以嘗試提高 RAG 管道性能的潛在“超參數”。與深度學習中的實驗類似&#xff0c;例如&am…

關于jinja2高版本api變化導致notebook導出html失敗的問題

最新jinja2版本已經到了3.1.2&#xff0c;但是nbconvert引用的應該是老版本&#xff0c;具體代碼報錯如下 Type "help", "copyright", "credits" or "license" for more information. >>> import nbconvert Traceback (most…

spark從表中采樣(隨機選取)一定數量的行

在Spark SQL中&#xff0c;你可以使用TABLESAMPLE來按行數對表進行采樣。以下是使用TABLESAMPLE的示例&#xff1a; SELECT * FROM table_name TABLESAMPLE (1000 ROWS);在這個示例中&#xff0c;table_name是你要查詢的表名。TABLESAMPLE子句后面的(1000 ROWS)表示采樣的行數…

axios 基礎的 一次封裝 二次封裝

一、平常axios的請求發送方式 修改起來麻煩的一批 代碼一大串 二、axios的一次封裝 我們會在src/utils創建一個request.js的文件來存放我們的基地址與攔截器 /* 封裝axios用于發送請求 */ import axios from axios/* (1)request 相當于 Axios 的實例對象 (2)為什么要有reque…

VSCode使用Remote-SSH連接服務器時報錯:無法與“***”建立連接: XHR failed.

關于VSCode的報錯問題&#xff1a;無法與“***”建立連接: XHR failed 問題描述問題理解解決方法手動在本地下載安裝包&#xff0c;然后手動傳到服務器端 問題描述 是的&#xff0c;我又踩坑了&#xff0c;而且這個弄了好久&#xff0c;也重新裝了VSCode軟件&#xff0c;好像結…

2024黑龍江省職業院校技能大賽暨國賽選拔賽“GZ031應用軟件系統開發”賽項賽題題庫

2024黑龍江省職業院校技能大賽暨國賽選拔賽 “GZ031應用軟件系統開發”賽項賽題題庫 2024黑龍江省職業院校技能大賽暨國賽選拔賽 應用軟件系統開發賽項&#xff08;高職組&#xff09; 賽題第1套 目錄 競賽說明 模塊一&#xff1a;系統需求分析 任務1&#xff1a;制造執行…

Kotlin之for循環的具體使用說明

我們用java進行Android開發過程中&#xff0c;經常會用到for循環&#xff0c;在Kotlin中也會經常用到&#xff0c;但是在最近使用Kotlin中我發現&#xff0c;在java中使用for循環不會有什么問題&#xff0c;但是在Kotlin中會出現問題&#xff0c;就是循環出出來的結果不一樣&am…

前端框架(Front-end Framework)和庫(Library)的區別

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 歡迎來到前端入門之旅&#xff01;感興趣的可以訂閱本專欄哦&#xff01;這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

阿里云國際版CDN加速,如何判斷網站IP已加速?

將源站接入阿里云CDN服務后&#xff0c;您可以通過IP檢測功能&#xff0c;檢測客戶端請求實際訪問的IP是否為CDN加速節點IP&#xff0c;判斷加速是否生效。 應用場景 IP檢測的應用場景如下&#xff1a; 場景一&#xff1a;成功配置CDN后&#xff0c;您可以檢測客戶端請求實際…

Android popupwindow在低版本手機上無法顯示

所以我開始看各個參數&#xff0c;注意到了在我自定義popupwindow的builder下的&#xff1a;&#x1f447;&#x1f447; .showAsDropDown(mLinMain, 0, 0);就是這個&#xff0c;這時候我想到了屏幕的原點坐標是&#xff08;0&#xff0c; 0&#xff09;&#xff0c;所設置的p…

Postman高級應用——變量、流程控制、調試、公共函數、外部數據文件

Postman 提供了四種類型的變量 環境變量&#xff08;Environment Variable&#xff09; 不同的環境&#xff0c;使用不同的環境變量&#xff0c;例如&#xff1a;測試過程中經常會用到 測試環境&#xff0c;外網環境等 全局變量&#xff08;Global Variable&#xff09; 所有的…

12.使用 Redis 優化登陸模塊

目錄 1. 使用 Redis 優化登陸模塊 1.1 使用 Redis 存儲驗證碼 1.2 使用 Redis 存儲登錄憑證 1.3 使用 Redis 緩存用戶信息 1. 使用 Redis 優化登陸模塊 使用 Redis 存儲驗證碼&#xff1a;驗證碼需要頻繁的訪問與刷新&#xff0c;對性能要求較高&#xff1b;驗證碼不需要永…

【計算機網絡】序列化,反序列化和初識協議

目錄 ?編輯 一、概念 二、 序列化過程&#xff1a; 選擇序列化格式&#xff1a; 實現序列化代碼&#xff1a; JSON示例&#xff1a; Protocol Buffers示例&#xff1a; JSON編碼示例&#xff1a; 傳輸或存儲&#xff1a; 三、反序列化過程&#xff1a; 下面是反序列…

web前端之中文輸入法導致的高頻事件、addEventListener、compositionstart、compositionend

MENU 代碼compositionendcompositionstartaddEventListener 代碼 html <input type"text" />JavaScript var inp document.querySelector(input); let isComposing false;function search() {if (isComposing) return false;console.log(搜索: , inp.valu…

(企業 / 公司項目) 企業項目如何使用jwt?

按照企業的項目然后寫的小demo&#xff0c; 自己搞一個登錄接口然后調用jwtUtil工具類 后端實現 創建一個通用模塊common來實現jwt生成token 登錄注冊的基本實現邏輯思路 面試| ProcessOn免費在線作圖,在線流程圖,在線思維導圖 注釋挺詳細的jwtUtil工具類&#xff0c; 封裝的…

WPF仿網易云搭建筆記(5):信息流控制之IOC容器

文章目錄 專欄和Gitee倉庫前言IOC容器Prism IOC使用聲明兩個測試的服務類MainWindow IOC 注入[單例]MainWindow里面獲取UserController無法使用官方解決方案 使用自定義IOC容器&#xff0c;完美解決既然Prism不好用&#xff0c;直接上微軟的IOC解決方案App.xaml.csViewModel里面…

網絡測試工具:tcping-測試端口連接

網絡測試工具&#xff1a;tcping-測試端口連接 平常使用的ping&#xff0c;是通過icmp協議去測試網絡連通性的&#xff0c;tcping是通過tcp三次握手測試端口的連通性。總的來說&#xff0c;ping測試的是L3的連通性&#xff0c;tcping測試的是L4的連通性。 tcping工具下載 htt…

10.RIP路由信息協議

10.RIP 網段經常產生變化的話&#xff0c;建議使用動態路由協議&#xff0c;當網段發生變化的時候會自動通告給其他路由器 它不看鏈路的帶寬&#xff0c;只看鏈路中的跳數&#xff0c;只要是跳數多的&#xff0c;不管帶寬有多大&#xff0c;它就認為是不好的 RIP跳數有限 …

java中LinkedList和List繼承有什么區別?

在Java中&#xff0c;LinkedList 和 List 是兩個不同的概念。List 是一個接口&#xff0c;而 LinkedList 是實現了 List 接口的一個具體類。 List 接口&#xff1a; List 是Java集合框架中的一個接口&#xff0c;它表示有序的集合&#xff0c;允許重復元素。List 接口繼承自 C…

TYPE-C接口設備實現DRP+OTG功能芯片

隨著USB-C接口的普及&#xff0c;歐盟的法律法規強制越來越多的設備開始采用這種接口。由于 USB-C接口的高效性和便攜性&#xff0c;使各種設備之間的連接和數據傳輸變得非常方便快捷&#xff0c;它們不僅提供了強大的功能&#xff0c;還為我們的日常生活和工作帶來了極大的便利…