」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 React.js 中建立表單:初學者指南

在 React.js 中建立表單:初學者指南

發佈於2024-08-28
瀏覽:402

Building Forms in React.js : A beginners guide

表單是 Web 應用程式不可或缺的一部分,支援使用者互動和資料收集。在 React.js 中,建立表單涉及使用狀態管理和元件驅動架構來確保效率和可維護性。本指南將涵蓋在 React.js 中建立表單的最佳實踐,使您的應用程式健壯且用戶友好。
 

1.使用受控組件

 
受控元件是 React 中處理表單輸入的首選方式。它們將表單資料保留在元件狀態中,從而更易於管理和驗證。
 
將所有表單輸入值儲存在一個狀態中。建立一個物件並將所有輸入與其狀態中的屬性映射,範例如下

import React, { useState } from 'react';

const MyForm = () => {


  const [formData, setFormData] = useState({ name: '', email: '' });

  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData({ ...formData, [name]: value });
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(formData);
  };

return (
  
)} export default MyForm

2.錯誤處理

 
錯誤處理和驗證是表單的重要組成部分。您必須驗證並檢查使用者輸入的每個值是否有錯誤,並處理所有情況,例如:

  • 取得 null/未定義
  • 取得空值
  • 無效資料型態等

必須實現客戶端驗證以增強使用者體驗並減少伺服器負載,從而最終提高效能。利用 Yup 等程式庫或自訂驗證邏輯來確保資料完整性。

讓我們看看,如何實作自訂驗證邏輯

const validate = (formData) => {
  const errors = {};
  if (!formData.name) errors.name = 'Name is required';
  if (!formData.email) errors.email = 'Email is required';
  return errors;
};
const MyForm = () => {
  const [formData, setFormData] = useState({ name: '', email: '' });
  const [errors, setErrors] = useState({});
  const handleSubmit = (e) => {
    e.preventDefault();
    const validationErrors = validate(formData);
    if (Object.keys(validationErrors).length === 0) {
    console.log(formData);
    } else {
    setErrors(validationErrors);
  }
};
return (
  
{errors.name && {errors.name}} {errors.email && {errors.email}}
); };

 
為了工作方便,必須使用Yup套件來順利驗證表單資料。它是一個非常流行的套件,與 React-Hook-Form 或 Formik 等表單庫一起使用。
是的文件:https://www.npmjs.com/package/yup
 

3.利用第三方庫

 
Formik 和 React Hook Form 等程式庫簡化了表單管理,提供了開箱即用的強大功能,並使開發人員可以輕鬆地以更具可擴展性和靈活的方式建立和驗證表單

使用 Formik:

文件:- https://formik.org/docs/overview

import React from 'react';
import ReactDOM from 'react-dom';
import { Formik, Field, Form } from 'formik';


const BasicForm = () => (
   

Sign Up

{ await new Promise((r) => setTimeout(r, 500)); alert(JSON.stringify(values, null, 2)); }} >
); ReactDOM.render(, document.getElementById('root'));

點擊看現場Formik示範

結論

 
透過遵循這些最佳實踐,在 React.js 中建立表單可以變得簡單且有效率。使用受控元件進行狀態管理,徹底驗證輸入,利用第三方庫,透過適當的樣式增強使用者體驗,並優化效能以建立響應靈敏且健壯的表單。
透過遵守這些準則,您可以確保您的表單可靠、使用者友好且可維護,為使用者和開發人員提供無縫體驗。

版本聲明 本文轉載於:https://dev.to/dualite/building-forms-in-reactjs-a-beginners-guide-11k1?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理
    為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理
    现代软件开发环境中哪些日益增长的网络安全风险让 CISO 忙碌? 开发人员和安全团队面临着越来越多的威胁,从复杂的开源和供应商控制的供应链攻击到 AI 生成的代码引入的漏洞,例如提示注入和 GitHub Copilot 的代码安全性差。现代应用程序通常严重依赖开源组件(例如在 npm、PyPI 或 ...
    程式設計 發佈於2024-11-06
  • 如何使用 React 對 MeteorJS 中的 Bootstrap Spacing 實用程式類別進行故障排除?
    如何使用 React 對 MeteorJS 中的 Bootstrap Spacing 實用程式類別進行故障排除?
    在 Bootstrap 中使用間距實用程式類別在 Bootstrap 中,間距實用程式類別可讓您輕鬆控制元素周圍的間距。但是,如果您在使用它們時遇到問題,這裡有一個指南可以幫助您解決。 更新的間距語法(Bootstrap 4 和 5)Bootstrap 4引入了間距實用程式類別的簡化語法:邊距:m{...
    程式設計 發佈於2024-11-06
  • 如何在Python中設定子程序的工作目錄?
    如何在Python中設定子程序的工作目錄?
    如何在Python中設定子程序的工作目錄在Python中,subprocess.Popen()函數允許您在Py thon中執行指令子程序。一個常見的要求是指定子程序的工作目錄。 問題:如何使用 subprocess.Popen() 設定子程序的工作目錄? 答案:要指定工作目錄,請使用 subproc...
    程式設計 發佈於2024-11-06
  • Pandas 什麼時候創建視圖而不是副本?
    Pandas 什麼時候創建視圖而不是副本?
    Pandas 視圖與副本生成規則Pandas 在決定 DataFrame 上的切片操作是否產生視圖或結果時採用特定規則複製。透過了解這些規則,您可以優化資料操作並避免意外行為。 從始終產生副本的操作開始:所有操作,除了那些專門設計用於修改的操作就地 DataFrame,創建副本。 只有某些操作支援 ...
    程式設計 發佈於2024-11-06
  • 使用代理伺服器解鎖地理限制網站
    使用代理伺服器解鎖地理限制網站
    利用代理服务器绕过区域封锁是一种常用且有效的方法。代理服务器作为中介,可以隐藏用户的真实IP地址,使用户的请求看起来像是来自代理服务器的地理位置,从而绕过区域封锁。 使用代理服务器绕过区域封锁的关键步骤:‌‌ 选择合适的代理服务器‌:根据目标区域的网络环境和遮挡情况,选择覆盖该区域的...
    程式設計 發佈於2024-11-06
  • 如何為三角形中的線性漸變鋸齒線建立平滑邊緣?
    如何為三角形中的線性漸變鋸齒線建立平滑邊緣?
    為線性漸變鋸齒線創建平滑邊緣為了設計具有由兩個三角形形成的尖底的響應式圖像,開發人員在三角形線上遇到了意外的鋸齒狀邊緣。為了解決這個問題,我們探索了產生更平滑漸變過渡的策略。 雖然硬停止線性漸變影像中的顏色通常會導致鋸齒狀邊緣,但調整停止點和起始點可以緩解此問題。不要突然從一種顏色變為另一種顏色,而...
    程式設計 發佈於2024-11-06
  • Java 中「static」的魔力:一為所有,一切為一!
    Java 中「static」的魔力:一為所有,一切為一!
    老实说,当我们第一次遇到 static 关键字时,我们都会想:“这是什么魔法?” ?但别担心,我会用一种简单、深入、甚至有点有趣的方式来分解它! 想象一下你正在参加一个聚会?你和你所有的朋友都戴着帽子。但每个人都必须分享一顶帽子。这基本上就是 Java 中 static 关键字的作用!您不必为每个朋...
    程式設計 發佈於2024-11-06
  • 如何在 Laravel Eloquent ORM 中對錶進行別名以增強靈活性和可讀性?
    如何在 Laravel Eloquent ORM 中對錶進行別名以增強靈活性和可讀性?
    Laravel 的Eloquent 查詢中的別名表:超越DB::table在Laravel 的Eloquent ORM 中,您可以使用乾淨的、物件導向的方法與資料庫進行互動。然而,有時您可能會遇到需要更大靈活性的查詢,例如別名表。 挑戰考慮使用 Laravel 的查詢產生器來查詢:$users = ...
    程式設計 發佈於2024-11-06
  • 如何使用 document.write 功能動態包含腳本?
    如何使用 document.write 功能動態包含腳本?
    動態包含具有document.write功能的腳本問題:如何將帶有變數src屬性的腳本標籤動態加入網頁中,特別是如果src 包含document.write 函數? 背景:通常,在 HTML 頭中添加具有特定 src 屬性的腳本標記可以無縫運作。但是,當src屬性中包含document.write程...
    程式設計 發佈於2024-11-06
  • 為什麼我在 Python 中收到「Bad magic number」導入錯誤?
    為什麼我在 Python 中收到「Bad magic number」導入錯誤?
    Bad Magic Number:了解導入錯誤使用 Python 時,遇到「Bad magic number」ImportError 可能會令人沮喪。此錯誤表示 pyc 檔案(Python 腳本的編譯版本)已損壞,這會導致與 Python 解釋器不相容。 瞭解幻數在 UNIX 中-type 系統中,...
    程式設計 發佈於2024-11-06
  • 如何測試 Go 中未匯出的函數?
    如何測試 Go 中未匯出的函數?
    從非測試 Go 檔案中呼叫測試函數在 Go 中,不應從程式碼本身呼叫測試函數。相反,單元測試應該使用 go test 指令執行。 黑白盒測試Go 支援兩種類型的單元測試:黑盒和白盒.黑盒測試測試從包外部匯出的函數,模擬外部包如何與其互動。 白盒測試從包本身內部測試未導出的函數。 Example考慮...
    程式設計 發佈於2024-11-06
  • 如何優化 Matplotlib 繪圖效能以提高速度和效率?
    如何優化 Matplotlib 繪圖效能以提高速度和效率?
    提高 Matplotlib 繪圖效能使用 Matplotlib 繪圖有時會很慢,尤其是在處理複雜或動畫圖形時。了解這種緩慢背後的原因可以幫助您優化程式碼以獲得更快的效能。 瓶頸和 BlittingMatplotlib 繪圖過程的主要瓶頸在於它對所有內容的重繪每次調用Fig.canvas.draw()...
    程式設計 發佈於2024-11-06
  • 面試工具包:陣列 - 滑動視窗。
    面試工具包:陣列 - 滑動視窗。
    一切都与模式有关! 一旦你学会了这些模式,一切都开始变得更容易了!如果你像我一样,你可能不喜欢技术面试,我不怪你——面试可能很艰难。 数组问题是面试中最常见的问题。这些问题通常涉及使用自然数组: const arr = [1, 2, 3, 4, 5]; 还有字符串问题,本质上是字符...
    程式設計 發佈於2024-11-06
  • 字串常數池:為什麼即使文字存在,「new」也會建立一個新的字串物件?
    字串常數池:為什麼即使文字存在,「new」也會建立一個新的字串物件?
    字串常數池:深入檢查Java 中的字串常數池被池化以優化記憶體使用並提高效能。這表示當遇到字串文字時,編譯器會檢查字串常數池中是否存在具有相同值的現有字串物件。如果找到,引用將定向到現有對象,避免建立新對象。 但是,當使用「new」運算子建立新的 String 物件時,會出現混亂,因為這似乎與規則相...
    程式設計 發佈於2024-11-06
  • 如何在 PHP 中使用 array_push() 處理多維數組?
    如何在 PHP 中使用 array_push() 處理多維數組?
    使用PHP 的array_push 添加元素到多維數組使用多維數組可能會令人困惑,特別是在嘗試添加新元素時。當任務是將儲存在 $newdata 中的循環中的資料附加到給定 $md_array 內的子數組「recipe_type」和「cuisine」時,就會出現此問題。 要實現此目的,您可以利用arr...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3