LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

React 入門基礎(chǔ):表單處理

admin
2024年12月11日 22:1 本文熱度 452

?? 如果還不了解 HTML 、 CSS和JS,可以參考本號(hào)下的 HTML21 天入門教程、 CSS 21 天入門教程和JS21天入門教程

表單處理一直是 web 應(yīng)用的重中之重,今天來(lái)看一下 react 如何處理表單。

從處理方式來(lái)看,有兩種選擇,一是將表單處理交給 React,另一種則是自己來(lái)處理。

這兩種方式都離不開(kāi) react 本身實(shí)現(xiàn)的支持。

且對(duì)于自己來(lái)處理,可以使用第三方提供的組件,比如 react-hook-form 獲得更多的便利。

useState 和 useRef

表單的處理,離不開(kāi) react 的兩個(gè) hook: useState 和 useRef。

useState

前面介紹過(guò),useState 用來(lái)管理狀態(tài)。

在表單中,表單控件的狀態(tài)則可以通過(guò) useState 來(lái)進(jìn)行管理。

以注冊(cè)表單為例,如下:

import React, { useState } from 'react';  function RegisterForm() {   const [mailValue, setMailValue] = useState('');   const [passwordValue, setPasswordValue] = useState('');   //如果有更多的表單控件    const handleSubmit = () => {     // 提交表單   };    const handleInputChange = (e) => {     setMailValue(e.target.value);     setPasswordValue(e.target.value);     //如果有更多的表單控件   };    return (     <div>       <input value={mailValue} onChange={handleInputChange} />       <input value={passwordValue} onChange={handleInputChange} />       {/* 如果有更多的表單控件 */}        <button onClick={handleSubmit}>Submit</button>     </div>   ); }  export default RegisterForm; 

這里通過(guò) useState 對(duì) name 和 mail 控件進(jìn)行了狀態(tài)管理。

如果表單中有其它的控件,則按原樣增加相應(yīng)的處理代碼。

上述代碼中的表單處理就交給 react 了,這樣創(chuàng)建出來(lái)的表單控件也被稱為 受控組件。

useRef

如果想要自己控制,則不能使用狀態(tài)來(lái)管理控件,這里就要使用 useRef,僅僅用于獲取值。

import React, { useRef } from 'react';  function RegisterFormNew() {   const mailRef = useRef(null);   const passwordRef = useRef(null);    const handleSubmit = () => {     const mailValue = passwordRef.current.value;     const passwordValue = passwordRef.current.value;     // 提交表單     console.log({ mailValue, passwordValue });   };    return (     <div>       <input ref={mailRef} />       <input ref={passwordRef} />       <button onClick={handleSubmit}>Submit</button>     </div>   ); }  export default RegisterFormNew; 

上述代碼中,使用了 useRef,通過(guò)它能獲取到控件當(dāng)前的值,但也僅此而。

這樣實(shí)現(xiàn)的控件,也被稱為非受控件組件,意思是不受 react 的控制。

既然不受 react 控制,也就意味著自己可以寫(xiě)代碼對(duì)表單進(jìn)行處理。

當(dāng)然現(xiàn)實(shí)情況下,不用自己從頭寫(xiě),借助于強(qiáng)大的第三方組件,可以輕松實(shí)現(xiàn)對(duì)表單的處理。

react-hook-form

這里介紹一個(gè)輕便的控件 react-hook-form,對(duì)上述代碼進(jìn)行修改之后如下。

import React from 'react'; import { useForm } from 'react-hook-form';  const RegisterFormNewHook = () => {   const {     register,     handleSubmit,     formState: { errors },   } = useForm();    const onSubmit = (data) => {     console.log(data);   };    return (     <form onSubmit={handleSubmit(onSubmit)}>       <input         name="email"         {...register({           required: '請(qǐng)輸入郵箱。'         })}       />       {errors.email && <p>{errors.email.message}</p>}       <input         name="password"         type="password"         {...register({ required: '請(qǐng)輸入密碼。' })}       />       {errors.password && <p>{errors.password.message}</p>}       <button type="submit">提交</button>     </form>   ); };  export default RegisterFormNewHook; 

為了展示這個(gè)組件的功能,寫(xiě)了一點(diǎn)驗(yàn)證在里面。

但即使是這樣,也能看到代碼非常的簡(jiǎn)潔和易懂。

總結(jié)

最后來(lái)總結(jié)一下今天的內(nèi)容要點(diǎn):

  • ?? 使用 useState 把表單交給 react 來(lái)處理,稱為受受控組件。
  • ?? 使用 useRef 對(duì)表單進(jìn)行處理,稱為非受控組件。
  • ?? 第三方組件 react-hook-form 使用了鉤子方式提供了完善的表單處理。

該文章在 2024/12/12 10:43:11 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲一区精品在线影视 | 亚洲人成站在线 | 亚洲伊人天堂一区二区 | 午夜影视在线播放免费人成 | 婷婷丁香五月欧美在线播放 | 一本一久本久a久久精品综合 |