react_web自定義組件_多類型Modal_搜索欄Search

目錄

一、帶輸入框的Modal

二、提示框Modal

三、搜索欄Search


在做項目時引入一些現成的UI組件,但是如果和設計圖沖突太大,更改時很麻煩,如果自己寫一個通用組件其實也就幾十分鐘或者幾個小時,而且更具UI設計更改也比較好更改,下面是兩個簡單的通用組件。

采用 react+ts+scss 進行開發。

如果你沒有react+ts+scss項目,請看這個文章。

react項目icon-default.png?t=N7T8https://blog.csdn.net/zxy19931069161/article/details/140117004?spm=1001.2014.3001.5501react項目這個文章頂部有一個現成的后臺項目,可以這個基礎上測試組件。

下面開始測試組件:

在src文件夾下新建components文件夾,用來放所有組件。

一、帶輸入框的Modal

效果如下,自行更改特別方便,內容:

在components文件夾下新建文件夾modalInput,modalInput文件夾下新建文件index.tsx和index.scss。

組件代碼:

index.tsx

import './index.scss';
// 需要一個x,關閉圖片,記得將圖片放在這個路徑下assets/images/,圖片叫這個名字 icon-delete.png
import Delete from '../../assets/images/icon-delete.png'
import { useState } from "react";function ModalInput(props: any) {// 輸入的文字,初始值為父元素傳過來的值 props.systemNameData// const [inputValueData, setInputValue] = useState(props.systemNameData)// 輸入的文字,初始值為空字符串const [inputValueData, setInputValue] = useState('')/*** 取消*/function cancleClick() {//執行父組件方法,關閉彈窗并將用戶輸入的值傳給父組件props.sendValueToFather(false, '');setInputValue('')}/*** 確定*/function sureClick() {props.sendValueToFather(false, inputValueData);setInputValue('')}/*** 獲得輸入框輸入的文字* @param event input輸入事件*/function inputValue(event: any) {setInputValue(event.target.value)}return (<div className='modal-input-box'><div className="modal-input-content"><div className="modal-title">應用名稱</div><img className="modal-delete" src={Delete} alt="關閉" onClick={cancleClick} /><div className="modal-line"></div><div className="modal-content"><div className="content-title">應用名稱</div><input className="content-input" type="text" placeholder='請輸入應用名稱' onChange={inputValue} value={inputValueData} /></div><div className="modal-cacle" onClick={cancleClick}>取消</div><div className="modal-sure" onClick={sureClick}>確定</div></div></div>);
}export default ModalInput;

index.scss

.modal-input-box {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.4);z-index: 99;.modal-input-content {width: 560px;padding: 24px 24px 58px 24px;border-radius: 12px;background: #FFF;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);box-sizing: border-box;.modal-title {color: #1E201F;font-size: 16px;line-height: 24px;letter-spacing: -0.01px;font-weight: bold;}.modal-delete {width: 24px;height: 24px;position: absolute;top: 24px;right: 24px;cursor: pointer;}.modal-line {width: 560px;height: 1px;background: #EFF2F9;position: absolute;top: 64px;left: 0;}.modal-content {width: 512px;padding: 32px 0;position: relative;.content-title {font-size: 14px;color: #505553;margin-left: 38px;padding-top: 8px;}.content-input {width: 360px;height: 34px;line-height: 34px;font-size: 14px;position: absolute;top: 32px;left: 114px;padding: 2px 10px 0px 10px;margin: 0;border-radius: 6px;border: 1px solid #E8ECEB;}input:focus {outline: 1px solid #00b498;border-radius: 4px;}input:hover {outline: 1px solid #00b498;border-radius: 4px;}input::placeholder {color: #A7AAA8;}}.modal-cacle {display: inline-block;padding: 6px 24px;border-radius: 6px;border: 1px solid #DCDFE6;font-size: 14px;position: absolute;bottom: 24px;right: 112px;cursor: pointer;&:hover {color: #00B498;border: 1px solid #00B498;}}.modal-sure {display: inline-block;padding: 6px 24px;border-radius: 6px;border: 1px solid #00B498;font-size: 14px;position: absolute;bottom: 24px;right: 24px;background-color: #00B498;color: #fff;cursor: pointer;&:hover {background: #1BCEB2;}}}
}

父組件引用時:

import ModalInput from "../.././components/modalInput";
import { useState } from "react";function Home() {// 系統名稱輸入彈窗是否顯示const [isShowModal, setIsShowModal] = useState(false)// 系統名稱const [systemName, setSystemName] = useState('');/*** 系統名稱輸入彈窗,子元素給父元素傳的,用戶輸入的內容* @param param 是否關閉彈窗* @param data 用戶輸入的內容*/function getValueFromSon(param: boolean, data: string) {setIsShowModal(param);if (data !== '') {setSystemName(data);// 傳給后端,并刷新獲取信息數據接口}}return (<div>{isShowModal ? <ModalInput isShow={isShowModal} systemNameData={systemName} sendValueToFather={getValueFromSon}></ModalInput> : ''}</div>);
}export default Home;

二、提示框Modal

在components文件夾下新建文件夾modalTip,modalTip文件夾下新建文件index.tsx和index.scss。

組件代碼:

index.tsx

import './index.scss';
// 替換成自己的提示圖標
import Delete from '../../assets/images/icon-delete.png'  //右上角關閉圖標
import Question from '../../assets/images/icon-question.png'//左上角彈窗類型,提問
import Error from '../../assets/images/icon-error.png'//左上角彈窗類型,錯誤function ModalInput(props: any) {// 提示彈窗類型,可以自行添加//error 錯誤//question 提問//none 沒有// 父元素傳過來的值let data = {type: props.type,// 彈窗類型,根據類型顯示圖標(錯誤/提問)title: props.title,// 標題content: props.content,//內容}/*** 取消*/function cancleClick() {props.sendValueToFather(false);}/*** 確定*/function sureClick() {props.sendValueToFather(true);}return (<div className='modal-input-box'><div className="modal-input-content"><div className="left-title">{data.type === "question" ? <img className="modal-tip" src={Question} alt="提示標志" /> : " "}{data.type === "error" ? <img className="modal-tip" src={Error} alt="提示標志" /> : " "}<div className="modal-title">{data.title}</div></div><img className="modal-delete" src={Delete} alt="關閉" onClick={cancleClick} /><div className="modal-content"><div className="content-text">{data.content}</div></div><div className="modal-cacle" onClick={cancleClick}>取消</div><div className="modal-sure" onClick={sureClick}>確定</div></div></div>);
}export default ModalInput;

index.scss

.modal-input-box {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.4);z-index: 99;.modal-input-content {width: 400px;padding: 24px 24px 58px 24px;border-radius: 12px;background: #FFF;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);box-sizing: border-box;.left-title {height: 24px;line-height: 24px;.modal-tip {width: 24px;height: 24px;margin-right: 6px;float: left;}.modal-title {display: inline;color: #1E201F;font-size: 16px;letter-spacing: -0.01px;font-weight: bold;float: left;}}.modal-delete {width: 24px;height: 24px;position: absolute;top: 24px;right: 24px;cursor: pointer;}.modal-content {width: 512px;padding: 14px 0 24px 0;position: relative;.content-text {width: 348px;font-size: 14px;color: #666;padding-top: 8px;word-break: break-all;text-align: justify;text-justify: inter-word;line-height: 22px;}}.modal-cacle {display: inline-block;padding: 6px 24px;border-radius: 6px;border: 1px solid #DCDFE6;font-size: 14px;position: absolute;bottom: 24px;right: 112px;cursor: pointer;&:hover {color: #00B498;border: 1px solid #00B498;}}.modal-sure {display: inline-block;padding: 6px 24px;border-radius: 6px;border: 1px solid #00B498;font-size: 14px;position: absolute;bottom: 24px;right: 24px;background-color: #00B498;color: #fff;cursor: pointer;&:hover {background: #1BCEB2;}}}
}

組件調用:

import ModalTip from "../.././components/modalTip";
import { useState } from "react";function Home() {// 系統名稱輸入彈窗是否顯示const [isShowModal, setIsShowModal] = useState(false)/*** 子元素傳給父元素的結果* @param param 取消/確定*/function getValueFromSon(param: boolean) {setIsShowModal(false);if (param) {//用戶點擊確定}else{//用戶點擊取消}}return (<div>{isShowModal ? <ModalTip type={'question'} title={"確定刪除嗎?"} content={"刪除后不可恢復哦~"} sendValueToFather={getValueFromSon}></ModalTip> : ''}</div>);
}export default Home;

三、搜索欄Search

? ? ? ??

在components文件夾下新建文件夾search,search文件夾下新建文件index.tsx和index.scss。

組件代碼:

index.tsx

import './index.scss';
import { useState } from "react";
// 搜索圖標,記得添加
import SearchIcon from "../../assets/images/icon-search.png";function Search(props: any) {const [inputValueData, setInputValue] = useState("")/*** 獲得輸入框輸入的文字* @param event input輸入事件*/function inputValue(event: any) {setInputValue(event.target.value)}/*** 用戶點擊了鍵盤回車按鈕* @param e 元素信息*/function search(e: any) {if (e.keyCode === 13) {toFather()// 用戶按下回車后,讓input元素失去焦點var inputElement: any = document.getElementById('myInput');inputElement.blur();}}/*** 將用戶輸入的內容傳給父元素*/function toFather() {props.searchValue(inputValueData)}return (<div><input id="myInput" className="edu-Manage-input" type="text" placeholder={props.placeholder} onChange={inputValue} value={inputValueData} onKeyUp={search} /><img className="edu-Manage-search" src={SearchIcon} alt="搜索" onClick={toFather} /></div>);
}export default Search;

index.scss

.edu-Manage-input {width: 240px;height: 34px;line-height: 34px;font-size: 14px;padding: 2px 0px 0px 34px;margin: 0;border-radius: 6px;border: 1px solid #E8ECEB;cursor: pointer;
}.edu-Manage-search {width: 14px;height: 14px;position: absolute;left: 28px;top: 28px;cursor: pointer;z-index: 99;&:hover {input {outline: 1px solid #00b498;border-radius: 4px;}}
}input:focus {outline: 1px solid #00b498;border-radius: 4px;
}input:hover {outline: 1px solid #00b498;border-radius: 4px;
}input::placeholder {color: #A7AAA8;
}

組件調用:

import Search from "../.././components/search";function Home() {/*** 搜索組件返回用戶搜索的字符串* @param value 用戶搜索的字符串*/function getSearchData(value: string) {console.log(value)}return (<div><Search placeholder="請輸入姓名" searchValue={getSearchData}></Search></div>);
}export default Home;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40446.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40446.shtml

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

相關文章

【Linux進程】進程優先級 Linux 2.6內核進程的調度

前言 進程是資源分配的基本單位, 在OS中存在這很多的進程, 那么就必然存在著資源競爭的問題, 操作系統是如何進行資源分配的? 對于多個進程同時運行, 操作系統又是如何調度達到并發呢? 本文將以Linux kernel 2.6為例 , 向大家介紹進程在操作系統中 (OS) 的調度原理; 1. 進程優…

【網絡安全】第7講 計算機病毒概述(筆記)

一、計算機病毒的簡介 1、名稱的由來 由生物醫學上的 “病毒” 一詞借用而來。 &#xff08;1&#xff09;與生物醫學上“病毒”的異同 同&#xff1a;都具有傳染性、流行性、針對性等。異&#xff1a;不是天生的&#xff0c;而是人為編制的具有特殊功能的程序。 2、病毒的起…

免費代理 IP 如何泄露您的個人信息?

互聯網時代&#xff0c;信息安全和隱私保護成為人們關注的焦點。很多用戶出于各種需要&#xff0c;使用代理服務器瀏覽網頁或進行其他網絡活動&#xff0c;其中免費代理IP因其免費的特點而受到廣泛青睞。然而&#xff0c;免費代理IP并不總是一個安全可靠的選擇&#xff0c;它們…

process.env 管理 Vue 項目的環境變量(Vue項目中環境變量的配置及調用)

簡述&#xff1a;在構建 Vue 應用時&#xff0c;管理配置是開發中的一個重要部分。不同的環境&#xff08;如開發、測試和生產&#xff09;往往需要不同的配置&#xff0c;例如 API、 基礎 URL、第三方服務的密鑰等。使用環境變量可以幫助我們更好地管理這些配置。這里將介紹如…

每天10個js面試題(二)

1.事件輪詢&#xff1f; JavaScript 是單線程的&#xff0c;同一時間只能做一件事。所有任務都需要排隊&#xff0c;前一個任務結束&#xff0c;才會執行后一個任務&#xff0c;為了保證任務有序的執行&#xff0c;事件輪詢就是單線程任務調度的一種方式&#xff0c;單線程任務…

1014-01SF 同軸連接器

型號簡介 1014-01SF是Southwest Microwave的一款2.92 mm 同軸連接器。這款連接器外殼采用鋼CRES 合金 UNS S30300&#xff0c;觸點采用鈹銅 (BeCu)&#xff0c;UNS C17300&#xff0c;并經過金鍍處理&#xff0c;以確保良好的導電性和耐腐蝕性。適用于高頻微波應用&#xff0c;…

如何設計通用用戶、權限、菜單數據表

在設計一個通用的用戶、權限和菜單管理系統時&#xff0c;我們通常需要創建幾個核心的數據庫表來管理用戶信息、角色信息、權限信息以及菜單信息。下面是一個基于SQL的示例&#xff0c;展示了如何建立這些基礎表格。 數據庫表設計 1. 用戶表 (users) Sql 1CREATE TABLE user…

從 0 到 1 安裝運行 Qwen2

環境信息&#xff1a; PyTorch 2.0.0 Python 3.8(ubuntu20.04) Cuda 11.8 RTX 3090(24GB) * 1 模型 /home/zhangwei/llm 源碼 /usr/local/project/conda/Qwen/Qwen mkdir -p /usr/local/project/conda/Qwen #【用來存放Qwen2源碼】 mkdir -p /home/zhangwei/llm #【用來存放Q…

機器人典型的交互任務、阻抗控制的示意圖、內涵、意義、存在的交互控制科學問題

機器人典型的交互任務 機器人在實際應用中經常需要完成與環境的交互任務&#xff0c;這些任務包括但不限于&#xff1a; 裝配任務&#xff1a;在制造業中&#xff0c;機器人需要準確地操控和組裝各種零部件&#xff0c;包括不同形狀、大小和材質的物體。搬運任務&#xff1a;…

科普文:一文搞懂nginx原理和實戰

1. Nginx簡介與核心架構 1.1 Nginx簡介 Nginx (engine x) 是一個高性能的 HTTP 和反向代理服務器&#xff0c;也是一個 IMAP/POP3/SMTP 郵件代理服務器。 由 Igor Sysoev 于2004年首次發布&#xff0c;其設計目標是解決 C10K 問題&#xff0c;即在一臺服務器上同時處理一萬個并…

The Sandbox 人物化身每月獎勵: 七月版來了!

人物化身的持有者可以從 The Sandbox 領取自己的隊服&#xff01; 視頻&#xff1a;https://youtu.be/tSo5FPL7DhE 我們又推出了人物化身所有者月度獎勵&#xff01;在七月&#xff0c;我們將通過 The Sandbox 隊服來弘揚體育競技精神。穿上這些時尚的元宇宙隊服&#xff0c;代…

Java:HashMap底層原理

一、前言 在Java 7及之前的版本中&#xff0c;HashMap的底層數據結構主要是數組加鏈表&#xff0c;在Java 8中&#xff0c;HashMap的底層數據結構是數組鏈表紅黑樹的組合。 二、底層數據結構 1. 數組 初始化和擴容&#xff1a;HashMap首先會初始化一個指定長度的數組&#xf…

單機多網卡互通——問題跟蹤+工具分析

一、背景 想搭建soft ROCE(RXE)與實體ROCE設備互聯的測試環境&#xff0c;為了節省機器以及使用方便&#xff0c;預想在配備ROCE卡的主機上&#xff0c;用另一個網卡綁定soft ROCE&#xff0c;然后互通。 [ETH1 ROCE] <--------------------> [ETH2 RXE] 二、問題跟…

Appium元素定位(全網詳細講解)(二)

1.appium inspector&#xff08;定位元素的工具&#xff09;使用方法 詳細介紹&#xff1a; 詳細解釋&#xff1a; 圖標名稱說明1Show Element Handles是否顯示元素句柄2Select Elements選擇元素定位3Tap/Swipe By Coordinates按坐標點擊/滑動4Download Screenshot下載屏幕截…

2024機器遺忘(Machine Unlearning)技術分類-思維導圖

1 介紹 機器遺忘&#xff08;Machine Unlearning&#xff09;是指從機器學習模型中安全地移除或"遺忘"特定的數據點或信息。這個概念源于數據隱私保護的需求&#xff0c;尤其是在歐盟通用數據保護條例&#xff08;GDPR&#xff09;等法規中提出的"被遺忘的權利…

【漏洞復現】飛企互聯-FE企業運營管理平臺——SQL注入

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 飛企互聯-FE企業運營管理平臺是一個基于云計算、智能化、大數據…

【8】相關補充

【8】相關補充 文章目錄 前言一、不同模型在測試集上的精度二、實驗記錄三、SNP位點篩選及其它python腳本四、總結五、后續安排總結 前言 存放一些有關這個項目研究的補充。 三葉青圖像識別研究簡概 一、不同模型在測試集上的精度 存放了不同識別模型在測試集上精度評估展示…

Java中的時間日期處理與時區管理

Java中的時間日期處理與時區管理 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在現代軟件開發中&#xff0c;時間日期處理和時區管理是至關重要的部分。Jav…

Android HWASAN使用與實現原理

一、背景 為了提前檢測出Android User Sapce的app或native進程的內存錯誤問題&#xff0c;幫助研發定位與分析這些問題&#xff0c;基于Android 14版本上對HWASAN做了調研分析。 二、ASAN介紹 HWASAN是在ASAN的基礎上做了拓展&#xff0c;因此在介紹HWASAN之前先了解下ASAN.…

ES8.13.0 java client請求響應報錯status: 200, [es/search] Failed to decode response

最近在做商城項目使用ES8.13.0做商品復雜的檢索功能時&#xff0c;遇到一個報錯如下&#xff1a; 2024-07-05 10:47:53.994 ERROR 10708 --- [nio-7500-exec-1] com.tfq.exception.RRExceptionHandler : co.elastic.clients.transport.TransportException: node: http://1…