日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

React 新 Hook:UseFormStatus 使用詳解

來源: 責(zé)編: 時間:2024-07-17 07:44:48 605觀看
導(dǎo)讀一、action 支持異步回調(diào)一個令人振奮的特性就是,在 React19 中,action 支持傳入異步回調(diào)函數(shù)。例如如下代碼:async function formAction(formdata) { const title = formdata.get('title') const content = formdata.

YeH28資訊網(wǎng)——每日最新資訊28at.com

一、action 支持異步回調(diào)

一個令人振奮的特性就是,在 React19 中,action 支持傳入異步回調(diào)函數(shù)。YeH28資訊網(wǎng)——每日最新資訊28at.com

例如如下代碼:YeH28資訊網(wǎng)——每日最新資訊28at.com

async function formAction(formdata) {  const title = formdata.get('title')  const content = formdata.get('content')  // 簡單校驗  if (!title || !content) {    return;  }  await new Promise(resolve => setTimeout(resolve, 1000))  setPosts(posts => [...posts, {title,content}])}
<form action={formAction}>  ...</form>

有了這個特性的支持,我們就可以非常方便的利用它來實現(xiàn)一些上傳邏輯。不過一個小小的需求就是,點擊提交之后,接口請求的過程中,我們希望按鈕處于禁用狀態(tài),那應(yīng)該怎么辦呢?YeH28資訊網(wǎng)——每日最新資訊28at.com

React 19 提供了名為 useFormStatus 的 hook 來幫助我們做到這個事情。YeH28資訊網(wǎng)——每日最新資訊28at.com

二、useFormStatus

和別的 hook 不同的是,我們需要從 react-dom 中獲取到它的引用。YeH28資訊網(wǎng)——每日最新資訊28at.com

import { useFormStatus } from "react-dom";

useFormStatus 能夠在 form 元素的子組件中,獲取到表單提交時的 pending 狀態(tài)和表單內(nèi)容。YeH28資訊網(wǎng)——每日最新資訊28at.com

?YeH28資訊網(wǎng)——每日最新資訊28at.com

與 form 同屬于一個組件,獲取不到,只能是封裝后的子組件才能獲取到。YeH28資訊網(wǎng)——每日最新資訊28at.com

const { pending, data, method, action } = useFormStatus();

pending 為 true 時,表示請求正在進行。我們可以利用這個值的變化在提交按鈕上設(shè)置 Loading 樣式。YeH28資訊網(wǎng)——每日最新資訊28at.com

data 格式為 FormData,表示此次提交里表單的所有內(nèi)容。YeH28資訊網(wǎng)——每日最新資訊28at.com

method 表示我們在提交時,所采用的請求方式,默認值為 get。YeH28資訊網(wǎng)——每日最新資訊28at.com

?YeH28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,提交方式并不需要通過如下方式設(shè)置,這樣做會報錯。YeH28資訊網(wǎng)——每日最新資訊28at.com

<form method="post"></form>

YeH28資訊網(wǎng)——每日最新資訊28at.com

這里主要是針對提交按鈕做的操作,因此我們需要單獨將提交按鈕相關(guān)的部分拿出來封裝成為一個子組件,并在子組件中利用 useFormStatus 獲取異步 action 的 pending 狀態(tài)。YeH28資訊網(wǎng)——每日最新資訊28at.com

代碼非常的簡單,如下所示:YeH28資訊網(wǎng)——每日最新資訊28at.com

function SubmitButton() {  const {pending} = useFormStatus()    return (    <div className="form_item">      <button        className='primary'        type='submit'        disabled={pending}      >        {pending ? 'Submitting...' : 'Submit'}      </button>          </div>  )}

然后在 form 元素中使用該組件即可。YeH28資訊網(wǎng)——每日最新資訊28at.com

<form actinotallow={formAction} method="post">  <div className="form_item">    <div className="label">Title</div>    <input name='title' type="text" placeholder='Enter title' />  </div>  <div className="form_item">    <div className="label">Name</div>    <input name='content' type="text" placeholder='Enter you name' />  </div>    <SubmitButton /></form>

四、案例二:提交時禁止輸入內(nèi)容

通常情況下,我們也希望在表單提交時,不允許輸入內(nèi)容。useFormStatus 可以很容易幫我們做到這一點。YeH28資訊網(wǎng)——每日最新資訊28at.com

實現(xiàn)非常簡單,我們將某一個字段單獨封裝到子組件中,利用 useFormStatus 提供的 pending 狀態(tài)來判斷是否禁用輸入,代碼如下:YeH28資訊網(wǎng)——每日最新資訊28at.com

function Input2({required, name}) {  const {pending} = useFormStatus()  return (    <div className="form_item">      <div className="label">Name</div>      <input        name={name}        type="text"        placeholder='Enter you name'        disabled={pending}      />    </div>  )}
<form action={formAction}>  <div className="form_item">    <div className="label">Title</div>    <input name='title' type="text" placeholder='Enter title' />  </div>  <Input2 required name='content' />  <SubmitButton /></form>

五、總結(jié)

useFormStatus 是結(jié)合 action 異步請求時使用的 hook,它們是對 HTML 表單能力的增強。因此我們可以借助他們與 HTML 表單元素自身支持的特性實現(xiàn)更復(fù)雜的表單交互邏輯。YeH28資訊網(wǎng)——每日最新資訊28at.com

這里我們需要注意的是 action 與 onSubmit 的區(qū)別。onSubmit 會優(yōu)先于 action 執(zhí)行。并且,如果我們在 onSubmit 的回調(diào)函數(shù)中,使用了 preventDefault,action 回調(diào)將不會執(zhí)行。YeH28資訊網(wǎng)——每日最新資訊28at.com

function onSubmit(e) {  e.preventDefault()  // ...}

在 onSubmit 中,我們可以結(jié)合 state,通過控制數(shù)據(jù)的行為來自定義表單行為,而無需過多依賴 HTML 表單元素本身的能力。具體如何抉擇大家需要根據(jù)自身項目的需求情況來定。YeH28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-101273-0.htmlReact 新 Hook:UseFormStatus 使用詳解

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 別做平庸Coder!掌握這十個架構(gòu)絕技,讓你成為團隊MVP

下一篇: 線程池遇到父子任務(wù),有大坑,要注意!

標(biāo)簽:
  • 熱門焦點
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現(xiàn)了一個流處理程序
  • K8S | Service服務(wù)發(fā)現(xiàn)

    一、背景在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;圖片對于測試「Tes」環(huán)境或者
  • Python異步IO編程的進程/線程通信實現(xiàn)

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現(xiàn)方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 小紅書1周漲粉49W+,我總結(jié)了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人&ldquo;珍藏&rdquo;是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級

    來源 | 伯虎財經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當(dāng)家&rdquo;的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
  • 中關(guān)村論壇11月25日開幕,15位諾獎級大咖將發(fā)表演講

    11月18日,記者從2022中關(guān)村論壇新聞發(fā)布會上獲悉,中關(guān)村論壇將于11月25至30日在京舉行。本屆中關(guān)村論壇由科學(xué)技術(shù)部、國家發(fā)展改革委、工業(yè)和信息化部、國務(wù)
Top 主站蜘蛛池模板: 永和县| 田林县| 涪陵区| 葵青区| 南陵县| 卢龙县| 谷城县| 东兴市| 环江| 布拖县| 庆城县| 思南县| 安泽县| 舒兰市| 富源县| 古田县| 佛山市| 长寿区| 安乡县| 台江县| 和平区| 东丽区| 崇左市| 通海县| 永城市| 海晏县| 沧州市| 满洲里市| 色达县| 固安县| 临邑县| 德化县| 商河县| 包头市| 灵寿县| 金寨县| 蛟河市| 睢宁县| 宝清县| 隆德县| 汾阳市|