Three.js + React 實戰系列 - 聯系方式提交表單區域 Contact 組件?(表單綁定 + 表單驗證)

對個人主頁設計和實現感興趣的朋友可以訂閱我的專欄哦!!謝謝大家!!!

在現代網頁中,一個精致的 Contact 區域不僅僅是表單的堆砌,更是用戶與我們建立聯系的第一印象。

在本節課中,我們構建了一個響應式、高顏值的聯系表單,同時融入動畫加載反饋與背景圖層,提升整體體驗感。

? 實現亮點

  • 通過插入 /assets/terminal.png 作為背景圖,形成了極具黑客風格的氛圍
  • 使用 useState 管理 nameemailmessage 字段
  • 通過 useRef 獲取 form DOM,并模擬一個加載狀態
  • 實現了統一風格的輸入框、按鈕

📝 核心代碼拆解

const [form, setForm] = useState({ name: '', email: '', message: '' });const handleChange = ({ target: { name, value } }) => {setForm({ ...form, [name]: value });
};

通過簡潔的 handleChange 函數,自動綁定 input 的 name 字段和當前值,實現了通用型雙向數據綁定。


<form ref={formRef} onSubmit={handleSubmit}>{/* 表單字段 */}<button disabled={loading}>{loading ? 'Sending...' : 'Send Message'}</button>
</form>

表單提交后通過 setLoading(true) 控制按鈕狀態,并在 2 秒后恢復,同時重置表單。

setTimeout(() => {setLoading(false);formRef.current.reset();setForm({ name: '', email: '', message: '' });
}, 2000);

這一邏輯模擬了后端異步發送郵件后的回調處理,也為后續集成 emailJS、Node 服務端等提供了擴展空間。

🌍 響應式與動效體驗


  • 🎨所有組件使用 flex, space-y-*, head-text 等樣式類確保在不同設備下展示良好。
  • 📱提交按鈕搭配箭頭圖標 /assets/arrow-up.png,視覺反饋更直觀。
  • 💻 表單內容 hover 與 placeholder 文案也經過優化,更貼近真實應用場景。

在這里插入圖片描述

📌 總結

Contact.jsx 組件是連接我們和用戶的核心區域:

  • ?熟練使用 state 管理當前展示內容
  • ?深入理解表單綁定以及表單驗證
  • ?模擬郵件發送功能,方便后續集成

🔠 下一篇預告:頁腳組件Footer.jsx

我們將在下一節中:

🌟 完成個人主頁項目的最后一節,頁腳部分。

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

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

相關文章

UOJ 164【清華集訓2015】V Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?)&#xff0c;另有序列 h h h&#xff0c;初始時 h a ha ha. 有 m m m 個操作分五種&#xff1a; add ? ( l , r , v ) \operatorname{add}(l,r,v) add(l,r,v)&#xff1a;…

C++開發過程中的注意事項詳解

目錄 C++開發過程中的注意事項詳解 一、內存管理:避免泄漏與資源浪費 1.1 使用智能指針管理動態內存 1.2 避免手動內存管理的陷阱 1.3 利用RAII機制管理資源 1.4 容器與內存分配 二、安全性:防御攻擊與未定義行為 2.1 輸入驗證與安全編碼 2.2 使用安全的通信協議 2…

Git 時光機:修改Commit信息

前言 列位看官都知道&#xff0c;Git 的每一次 git commit&#xff0c;其中會包含作者&#xff08;Author&#xff09;和提交者&#xff08;Committer&#xff09;的姓名與郵箱。有時可能會因為配置錯誤、切換了開發環境&#xff0c;或者只是單純的手滑&#xff0c;導致 commi…

QSFP+、QSFP28、QSFP-DD接口分別實現40G、100G、200G/400G以太網接口

常用的光模塊結構形式&#xff1a; 1&#xff09;QSFP等效于4個SFP&#xff0c;支持410Gbit/s通道傳輸&#xff0c;可通過4個通道實現40Gbps傳輸速率。與SFP相比&#xff0c;QSFP光模塊的傳輸速率可達SFP光模塊的四倍&#xff0c;在部署40G網絡時可直接使用QSFP光模塊&#xf…

好用的播放器推薦

以下是一些好用的播放器推薦&#xff0c;按照不同平臺和使用場景分類&#xff1a; 電腦端 VLC Media Player 特點&#xff1a;開源、跨平臺&#xff0c;支持幾乎所有的音視頻格式&#xff0c;無需額外安裝解碼器。具備強大的功能&#xff0c;如播放列表管理、視頻和音頻濾鏡、…

Vue基礎(8)_監視屬性、深度監視、監視的簡寫形式

監視屬性(watch)&#xff1a; 1.當被監視的屬性變化時&#xff0c;回調函數(handler)自動調用&#xff0c;進行相關操作。 2.監視的屬性必須存在&#xff0c;才能進行監視&#xff01;&#xff01; 3.監視的兩種寫法&#xff1a; (1).new Vue時傳入watch配置 (2).通過vm.$watc…

AI服務器的作用都有哪些?

根據網絡環境的飛速發展&#xff0c;人工智能技術逐漸入駐到各個行業當中&#xff0c;其中AI服務器則是一種專門用來運行人工智能算法和模型的硬件設備&#xff0c;通常具備高性能計算、大容量存儲和并行計算等多種功能&#xff0c;本文就來詳細講解一下AI服務器的作用&#xf…

[250508] Linux 內核瘦身:棄用 i486 及早期 586 CPU 支持

目錄 Linux 內核計劃精簡&#xff1a;將移除對古董級 CPU 的支持 Linux 內核計劃精簡&#xff1a;將移除對古董級 CPU 的支持 核心動態&#xff1a; Linux 內核開發社區正計劃一項重要的代碼清理工作&#xff0c;目標是移除對非常古老的 i486 及早期 586 (如早期奔騰) CPU 架構…

ROM詳解

一、ROM基礎原理 定義與特性 ROM&#xff08;Read-Only Memory&#xff0c;只讀存儲器&#xff09;是一種非易失性存儲器&#xff0c;數據在制造或編程后永久保存&#xff0c;斷電后不丟失。其核心特性為數據不可修改&#xff08;或需特殊條件修改&#xff09;。 存儲原理&…

解決虛擬機掛起之后的網絡問題

相信很多人都有遇到過自己在VM上面手滑點了個掛起然后就連不了網絡的情況吧&#xff0c;我也遇到了&#xff0c;下面是我的解決辦法&#xff0c;希望對大家有所幫助&#xff01; 我運行完如下&#xff1a; 基本上出現綠色的就說明網絡連上啦&#xff01;

在Star-CCM+中實現UDF并引用場數據和網格數據

在Star-CCM中實現UDF并引用場數據和網格數據 Star-CCM中的用戶自定義函數(UDF)允許用戶通過Java或C/C編程擴展軟件功能。下面我將詳細介紹如何實現UDF并引用模擬數據。 1. UDF基礎實現方法 1.1 創建UDF的步驟 在Star-CCM中&#xff0c;右鍵點擊"工具" → “用戶函…

ConnectionResetError(10054, ‘遠程主機強迫關閉了一個現有的連接,Python爬蟲

文章目錄 ConnectionResetError(10054, 遠程主機強迫關閉了一個現有的連接1.問題描述2.嘗試的解決方法&#xff08;均未生效&#xff09;2.1 請求重試機制2.2 模擬瀏覽器請求頭2.3 關閉連接資源2.4 延遲訪問 3.解決方案&#xff1a;使用 proxy_pool IP 代理池最后參考文章 Conn…

Redis相關命令詳解與原理(一)

目錄 Redis是什么&#xff1f; Redis 的特點和功能 Redis工作模式 與MySQL的區別 安裝編譯和啟動 redis的value類型編碼 string類型 基礎命令 應用 1.對象存儲 2.累加器 3.分布式鎖 4.位運算 list類型 基礎命令 應用 1.棧&#xff08;先進后出 FILO&#xff0…

Starrocks 的 ShortCircuit短路徑

背景 本文基于 Starrocks 3.3.5 本文主要來探索一下Starrocks在FE端怎么實現 短路徑&#xff0c;從而加速點查查詢速度。 在用戶層級需要設置 enable_short_circuit 為true 分析 數據流&#xff1a; 直接到StatementPlanner.createQueryPlan方法&#xff1a; ... OptExpres…

Oracle非歸檔模式遇到文件損壞怎么辦?

昨天夜里基地夜班的兄弟&#xff0c;打電話說有個報表庫連不上了&#xff0c;趕緊起來連上VPN查看一下&#xff0c;看到實例宕機了&#xff0c;先趕緊startup起來。 1.查看報錯信息 環境介紹&#xff1a;Redhat 6.9 Oracle 11.2.0.4 No Archive Mode 查看alert log 關鍵報…

關于一些平時操作系統或者軟件的步驟轉載

關于一些平時操作系統或者軟件的步驟轉載 關于python環境搭建 關于Ubuntu 1. 雙系統之Ubuntu快速卸載 2. VMware安裝Ubuntu虛擬機實現COpenCV代碼在虛擬機下運行教程 3. ubuntu 下 opencv的安裝以及配置&#xff08;親測有效&#xff09; 4. Ubuntu將c編譯成.so文件并測試 5…

hz2新建Keyword頁面

新建一個single-keywords.php即可&#xff0c;需要篩選項再建taxonomy-knowledge-category.php 參考&#xff1a;https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF創建了自定義產品分類products&#xff0c;現在想實現自定義產品分類下的…

VRRP協議-IP地址冗余配置

有兩個服務器172.16.42.1和172.16.42.121&#xff0c;通過VRRP協議使兩臺設備共用一個虛擬地址172.16.42.100&#xff0c;當 172.16.42.1 可用時&#xff0c;它會作為主路由器使用虛擬 IP 地址&#xff1b;當它不可用時&#xff0c;172.16.42.121 會接管虛擬 IP 地址&#xff0…

21、DeepSeekMath論文筆記(GRPO)

DeepSeekMath論文筆記 0、研究背景與目標1、GRPO結構GRPO結構PPO知識點**1. PPO的網絡模型結構****2. GAE&#xff08;廣義優勢估計&#xff09;原理****1. 優勢函數的定義**2.GAE&#xff08;廣義優勢估計&#xff09; 2、關鍵技術與方法3、核心實驗結果4、結論與未來方向關鍵…

卡爾曼濾波算法(C語言)

此處感謝華南虎和互聯網的眾多大佬的無償分享。 入門常識 先簡單了解以下概念&#xff1a;疊加性&#xff0c;齊次性。 用大白話講&#xff0c;疊加性&#xff1a;多個輸入對輸出有影響。齊次性&#xff1a;輸入放大多少倍&#xff0c;輸出也跟著放大多少倍 卡爾曼濾波符合這…