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

當前位置:首頁 > 科技  > 軟件

React 新 Hook:UseFormStatus 使用詳解

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

EIX28資訊網——每日最新資訊28at.com

一、action 支持異步回調

一個令人振奮的特性就是,在 React19 中,action 支持傳入異步回調函數。EIX28資訊網——每日最新資訊28at.com

例如如下代碼:EIX28資訊網——每日最新資訊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>

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

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

二、useFormStatus

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

import { useFormStatus } from "react-dom";

useFormStatus 能夠在 form 元素的子組件中,獲取到表單提交時的 pending 狀態和表單內容。EIX28資訊網——每日最新資訊28at.com

?EIX28資訊網——每日最新資訊28at.com

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

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

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

data 格式為 FormData,表示此次提交里表單的所有內容。EIX28資訊網——每日最新資訊28at.com

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

?EIX28資訊網——每日最新資訊28at.com

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

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

EIX28資訊網——每日最新資訊28at.com

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

代碼非常的簡單,如下所示:EIX28資訊網——每日最新資訊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 元素中使用該組件即可。EIX28資訊網——每日最新資訊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>

四、案例二:提交時禁止輸入內容

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

實現非常簡單,我們將某一個字段單獨封裝到子組件中,利用 useFormStatus 提供的 pending 狀態來判斷是否禁用輸入,代碼如下:EIX28資訊網——每日最新資訊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>

五、總結

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

這里我們需要注意的是 action 與 onSubmit 的區別。onSubmit 會優先于 action 執行。并且,如果我們在 onSubmit 的回調函數中,使用了 preventDefault,action 回調將不會執行。EIX28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人&ldquo;珍藏&rdquo;是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    &copy;自象限原創作者|程心排版|王喻可2016年7月13日,百度云計算戰略發布會在北京舉行,宣告著百度智能云的正式啟程。彼時的會場座無虛席,甚至排隊排到了門外,在場的所有人幾乎都
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • iQOO Neo8 Pro真機諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
Top 主站蜘蛛池模板: 全州县| 德保县| 乌兰察布市| 杂多县| 托克托县| 霍邱县| 怀化市| 封丘县| 涿州市| 马山县| 凉山| 曲阜市| 阳谷县| 香格里拉县| 金川县| 普安县| 永吉县| 齐河县| 桑植县| 县级市| 涿州市| 新闻| 巨鹿县| 潞城市| 孝义市| 大石桥市| 广灵县| 子洲县| 麻江县| 霍邱县| 搜索| 双牌县| 怀来县| 吉隆县| 苍山县| 琼结县| 盱眙县| 武威市| 大石桥市| 梅州市| 扶风县|