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

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

React 支持 Form Action 是在作妖?不,它是一種重磅回歸

來(lái)源: 責(zé)編: 時(shí)間:2024-07-12 17:24:31 220觀看
導(dǎo)讀這是一個(gè)超強(qiáng)的特性。仔細(xì)看完你就能體會(huì)。在 html 的基礎(chǔ)知識(shí)中,表單是很重要的一個(gè)環(huán)節(jié)。但是由于各種原因,原生的表單開(kāi)發(fā)方式相關(guān)知識(shí)被部分前端開(kāi)發(fā)所遺忘,他們對(duì) form action,formdata 有一種陌生感。因此,當(dāng)看到有

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

這是一個(gè)超強(qiáng)的特性。仔細(xì)看完你就能體會(huì)。Aqj28資訊網(wǎng)——每日最新資訊28at.com

在 html 的基礎(chǔ)知識(shí)中,表單是很重要的一個(gè)環(huán)節(jié)。但是由于各種原因,原生的表單開(kāi)發(fā)方式相關(guān)知識(shí)被部分前端開(kāi)發(fā)所遺忘,他們對(duì) form action,formdata 有一種陌生感。Aqj28資訊網(wǎng)——每日最新資訊28at.com

因此,當(dāng)看到有消息稱 React 19 支持了 form action 之后,許多前端感覺(jué)有點(diǎn)懵。不知道這是啥。這篇文章就先給大家科普一下相關(guān)的知識(shí)。Aqj28資訊網(wǎng)——每日最新資訊28at.com

一、HTML form action

先來(lái)看一段簡(jiǎn)單的代碼。Aqj28資訊網(wǎng)——每日最新資訊28at.com

<form id="form" method="get">  First name:  <input type="text" value="Jake" name="fname">  Last name:  <input type="text" value="Ma" name="lname">  <input type="submit" value="提交"></form>

當(dāng)我們使用表單 form 元素時(shí),內(nèi)部的表單元素可以根據(jù) name 屬性與 value 值自動(dòng)組合成一個(gè)完整的序列化表單對(duì)象。我們不再需要額外去拼接他們。Aqj28資訊網(wǎng)——每日最新資訊28at.com

合成的序列化對(duì)象,我們稱之為 FormData, 這是一個(gè)特殊的對(duì)象。我們可以直接通過(guò)如下方式獲取到該對(duì)象。Aqj28資訊網(wǎng)——每日最新資訊28at.com

let formdata = new FormData(form)console.log(formdata.get('fname'))console.log(formdata.get('lname'))

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

我們無(wú)法直接觀察到 FormData 的值,需要使用 .get 方法來(lái)獲取。Aqj28資訊網(wǎng)——每日最新資訊28at.com

FormData 也可以被網(wǎng)絡(luò)請(qǐng)求支持,例如我們可以把 FormData 對(duì)象作為 fetch 請(qǐng)求的 body,直接發(fā)送。Aqj28資訊網(wǎng)——每日最新資訊28at.com

form.onsubmit = async e => {  e.preventDefault()    const response = await fetch('/post/user', {    method: 'POST',    body: new FormData(form)  })  let res = await response.json()  // do something}

在這個(gè)案例中,當(dāng) type='submit' 的按鈕點(diǎn)擊提交時(shí),onsubmit 就會(huì)觸發(fā),我們可以在這個(gè)回調(diào)函數(shù)里執(zhí)行自己的提交邏輯。Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

HTTP 中 content-type 字段有專門支持 FormData 的值,如下所示:Aqj28資訊網(wǎng)——每日最新資訊28at.com

Content-Type: multipart/form-data

除此之外,我們可以使用 form 元素的 action 屬性來(lái)簡(jiǎn)化提交。不過(guò)它的表現(xiàn)會(huì)不太一樣。Aqj28資訊網(wǎng)——每日最新資訊28at.com

action 接收一個(gè) URL 作為參數(shù),可以是絕對(duì)路徑,也是可以相對(duì)路徑。它表示攜帶表單數(shù)據(jù)向該地址發(fā)送請(qǐng)求。默認(rèn)情況下頁(yè)面會(huì)跳轉(zhuǎn)到指定的 URL 地址。Aqj28資訊網(wǎng)——每日最新資訊28at.com

<form id="form" action="xx.html" method="post">  First name:  <input type="text" value="Jake" name="fname">  Last name:  <input type="text" value="Ma" name="lname">  <input type="submit" value="提交"></form>

服務(wù)端可以攔截該地址,并定義響應(yīng)行為。Aqj28資訊網(wǎng)——每日最新資訊28at.com

這樣做的好處就是我們可以簡(jiǎn)化提交行為的代碼。無(wú)需使用 JavaScript 對(duì)邏輯進(jìn)行任何額外的處理,就能完成一次提交操作。在沒(méi)有額外要求的情況下,我們可以非常方便的使用這種方式來(lái)提交表單數(shù)據(jù),上傳文件等。Aqj28資訊網(wǎng)——每日最新資訊28at.com

二、FormData 使用詳解

FormData API 如下圖所示。Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

四、案例

學(xué)習(xí)了這些基礎(chǔ)知識(shí)之后,我們來(lái)完成一個(gè)比較簡(jiǎn)單的案例。我們?cè)诒韱沃休斎胄畔ⅲ研畔⒂涗浾故驹谝粋€(gè)列表中。案例演示效果如下Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

首先我們要定義一個(gè)數(shù)據(jù),用于存儲(chǔ)列表。Aqj28資訊網(wǎng)——每日最新資訊28at.com

const [posts, setPosts] = useState([])

然后在 jsx 中,定義一個(gè)表單內(nèi)容,和列表渲染。Aqj28資訊網(wǎng)——每日最新資訊28at.com

<div>  <div>基礎(chǔ)的表單提交案例</div>  <form action={action}>    <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>    <div className="form_item">      <button className='primary' type='submit'>Submit</button>    </div>  </form>  <ul className='_07_list'>    {posts.map((post, index) => (      <div key={`${post.title}-${index}`} className='_07_item'>        <h2>{post.title}</h2>        <p>{post.content}</p>      </div>    ))}  </ul></div>

提交之后的邏輯在 action 中處理,action 回調(diào)函數(shù)能拿到最新的 formdata。然后把對(duì)應(yīng)的數(shù)據(jù)拿出來(lái),設(shè)置到 posts 里面即可。Aqj28資訊網(wǎng)——每日最新資訊28at.com

function action(data) {  const title = data.get('title')  const content = data.get('content')  if (title && content) {    setPosts([...posts, {title, content}])  }}

我們可以簡(jiǎn)單擴(kuò)展一下,在這個(gè)基礎(chǔ)之上做一些校驗(yàn)。我們把其中一個(gè) input 做一些簡(jiǎn)單的調(diào)整。Aqj28資訊網(wǎng)——每日最新資訊28at.com

<input  onInput={onInput}  name='content'  type="text"  placeholder='Enter you name'  required  pattern={'abc'}/>

在 css 中,新增如果校驗(yàn)不通過(guò)的樣式。Aqj28資訊網(wǎng)——每日最新資訊28at.com

input:invalid {  border: 1px dashed red;}

演示效果如下:Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

我們還可以通過(guò) input 的 onInput 事件對(duì)驗(yàn)證樣式進(jìn)行自定義。Aqj28資訊網(wǎng)——每日最新資訊28at.com

function onInput(event) {  let input = event.target  console.log(input.validity)  if (input.validity.valid) {    console.log('xxxxx', input.validity)  }}

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

這里面有許多狀態(tài)可以支持我們做許多自己的擴(kuò)展。Aqj28資訊網(wǎng)——每日最新資訊28at.com

五、它對(duì)服務(wù)端渲染的劃時(shí)代意義

這里大家需要注意的一個(gè)小細(xì)節(jié)就是,許多針對(duì)表單功能增強(qiáng)的 API,都不是從 react 中引入,而是從 react-dom 中引入。Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

第一時(shí)間我還沒(méi)想通這到底咋回事。感覺(jué)好奇怪。后來(lái)我才意識(shí)到,這對(duì)于服務(wù)端渲染有著巨大的劃時(shí)代的重要意義。Aqj28資訊網(wǎng)——每日最新資訊28at.com

在評(píng)估網(wǎng)頁(yè)性能中,有一個(gè)重要的性能指標(biāo):TTI:可交互時(shí)間。頁(yè)面加載完成,并且首屏顯示,并且頁(yè)面可以交互。Aqj28資訊網(wǎng)——每日最新資訊28at.com

但是,在以前的服務(wù)端渲染項(xiàng)目中,想要頁(yè)面元素可以被點(diǎn)擊,可交互,需要經(jīng)歷一個(gè)重要的過(guò)程,那就是 Hydrate 水合。意思就是說(shuō),第一時(shí)間從服務(wù)端給到頁(yè)面上的只是字符串,并不具備可交互功能,它需要瀏覽器渲染之后,變成 DOM 元素,再通過(guò) React 水合之后,再變成 React 組件,然后才可以正常點(diǎn)擊交互。Aqj28資訊網(wǎng)——每日最新資訊28at.com

因此,React 服務(wù)端渲染項(xiàng)目雖然首屏直出理論上會(huì)快一些,但是 TTI 要多經(jīng)歷一個(gè)水合的過(guò)程,那么可交互時(shí)間等待就比較久了。Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

其實(shí)也不一定,處理不好,服務(wù)端渲染項(xiàng)目也會(huì)更慢。Aqj28資訊網(wǎng)——每日最新資訊28at.com

React 19 支持的 form action,實(shí)際上是極大的利用了瀏覽器的自帶的表單能力,它要可交互,并不需要經(jīng)歷水合過(guò)程,瀏覽器渲染成 DOM 就可以正常交互了。Aqj28資訊網(wǎng)——每日最新資訊28at.com

道友們,誰(shuí)懂啊,這就有點(diǎn)厲害了。Aqj28資訊網(wǎng)——每日最新資訊28at.com

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

有的服務(wù)端渲染項(xiàng)目首屏渲染時(shí)間只需要不到 1s,但是首次可交互時(shí)間,能長(zhǎng)達(dá) 8s 之久。從這個(gè)簡(jiǎn)單的數(shù)據(jù)對(duì)比,你就能領(lǐng)會(huì)不需要水合是多大的提升了。Aqj28資訊網(wǎng)——每日最新資訊28at.com

這不僅在客戶端組件中,直接掙脫了之前受控組件在性能上的桎梏,還更進(jìn)一步在服務(wù)端渲染項(xiàng)目有更強(qiáng)的體現(xiàn)。如果一旦跟 next.js 有機(jī)結(jié)合...Aqj28資訊網(wǎng)——每日最新資訊28at.com

不得不佩服 React 團(tuán)隊(duì)在設(shè)計(jì)項(xiàng)目架構(gòu)解決方案上的超前思維。Aqj28資訊網(wǎng)——每日最新資訊28at.com

六、總結(jié)

React form Action 是一個(gè)很小的知識(shí)點(diǎn),但是它代表的是表單開(kāi)發(fā)的另一種思路,是一種開(kāi)發(fā)方式的隆重回歸。因此這要求我們對(duì) HTML 本身已經(jīng)支持的表單能力要有所了解。我們?cè)诤罄m(xù)的開(kāi)發(fā)使用中,會(huì)逐漸弱化受控組件的使用,這會(huì)帶來(lái)開(kāi)發(fā)體驗(yàn)和性能上的提升。Aqj28資訊網(wǎng)——每日最新資訊28at.com

除此之外,React 在表單開(kāi)發(fā)中還提供了許多功能增強(qiáng)的 hook,我們?cè)诤罄m(xù)的分享慢慢學(xué)習(xí)。Aqj28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-100724-0.htmlReact 支持 Form Action 是在作妖?不,它是一種重磅回歸

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

上一篇: 電商并發(fā)減庫(kù)存設(shè)計(jì),如何做到不超賣

下一篇: 記一次 .NET某上位視覺(jué)程序離奇崩潰分析

標(biāo)簽:
  • 熱門焦點(diǎn)
  • Mate60手機(jī)殼曝光 致敬自己的經(jīng)典設(shè)計(jì)

    8月3日消息,今天下午博主數(shù)碼閑聊站帶來(lái)了華為Mate60的第三方手機(jī)殼圖,可以讓我們?cè)谡鏅C(jī)發(fā)布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 小米平板5 Pro 12.4簡(jiǎn)評(píng):多專多能 兼顧影音娛樂(lè)的大屏利器

    疫情帶來(lái)了網(wǎng)課,網(wǎng)課盤活了安卓平板,安卓平板市場(chǎng)雖然中途停滯了幾年,但好的一點(diǎn)就是停滯的這幾年行業(yè)又有了新的發(fā)展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 把LangChain跑起來(lái)的三個(gè)方法

    使用LangChain開(kāi)發(fā)LLM應(yīng)用時(shí),需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過(guò)這個(gè)步驟先學(xué)習(xí)LLM模型的應(yīng)用,對(duì)Langchain進(jìn)行快速上手?本片講解3個(gè)把LangChain跑起來(lái)
  • Flowable工作流引擎的科普與實(shí)踐

    一.引言當(dāng)我們?cè)谌粘9ぷ骱蜆I(yè)務(wù)中需要進(jìn)行各種審批流程時(shí),可能會(huì)面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動(dòng)處理這些審批流程可能會(huì)導(dǎo)致開(kāi)發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 三言兩語(yǔ)說(shuō)透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫(xiě)出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實(shí)現(xiàn)原理和應(yīng)用
  • 三萬(wàn)字盤點(diǎn) Spring 九大核心基礎(chǔ)功能

    大家好,我是三友~~今天來(lái)跟大家聊一聊Spring的9大核心基礎(chǔ)功能。話不多說(shuō),先上目錄:圖片友情提示,本文過(guò)長(zhǎng),建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個(gè)核心的基礎(chǔ)功能,不
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬(wàn)

    來(lái)源 | 電商在線文|易琬玉編輯|斯問(wèn)受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、&ldquo;Ringdoll戒之人形&rdquo;淘寶店鋪有關(guān)外貌的評(píng)價(jià),黃山已經(jīng)聽(tīng)累了。生于1985年的他,哪
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開(kāi)發(fā)者大會(huì)2023(HDC.Together)大會(huì)上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來(lái),HarmonyOS一直以用戶為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
  • DRAM存儲(chǔ)器10月價(jià)格下跌,NAND閃存本月價(jià)格與上月持平

    10月30日,據(jù)韓國(guó)媒體消息,自今年年初以來(lái)一直在上漲的 DRAM 存儲(chǔ)器的交易價(jià)格僅在本月就下跌了近 10%,此次是全年首次降價(jià),而NAND 閃存本月價(jià)格與上月持平。市
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲一区二区三区高清| 国产区欧美区日韩区| 久久精品亚洲热| 久久精品一区二区三区四区 | 国产精品久久波多野结衣| 国产精品久久婷婷六月丁香| 国产日韩一区二区三区| 在线电影院国产精品| 亚洲精品视频免费观看| 亚洲欧美成aⅴ人在线观看| 久久久久久国产精品一区| 欧美成人精品一区二区| 国产精品久久国产精品99gif | 国产精品―色哟哟| 狠狠色2019综合网| 亚洲精品美女免费| 欧美一进一出视频| 欧美国产精品中文字幕| 国产精品综合视频| 亚洲国产免费看| 亚洲一区二区三区中文字幕在线 | 国产精品国产三级国产专播精品人| 国产日韩欧美在线看| 亚洲精品视频一区二区三区| 亚洲欧美日韩精品久久奇米色影视 | 精品福利免费观看| 亚洲视频电影图片偷拍一区| 久久久久亚洲综合| 国产精品国产自产拍高清av| 亚洲第一精品夜夜躁人人躁| 亚洲欧美日韩国产成人精品影院| 欧美www视频| 国产日韩一区二区| 国产精品99久久不卡二区| 久久综合伊人77777蜜臀| 国产精品久久久久一区二区三区| 亚洲二区三区四区| 欧美一区二区三区免费在线看| 欧美猛交免费看| 激情五月婷婷综合| 香蕉国产精品偷在线观看不卡| 欧美片网站免费| 曰韩精品一区二区| 性做久久久久久久久| 欧美日韩精品一区| 亚洲黄色在线看| 久久国产精品久久久久久久久久| 欧美性色视频在线| 亚洲破处大片| 久久亚洲国产精品日日av夜夜| 国产精品女主播| 99riav1国产精品视频| 免费成人高清视频| 国语自产精品视频在线看一大j8 | 黄色成人av网站| 欧美一区二区三区四区夜夜大片 | 国产精品久久久久一区二区三区共| 91久久黄色| 久久人人九九| 国产亚洲精品v| 午夜亚洲性色福利视频| 国产精品白丝jk黑袜喷水| 日韩视频在线永久播放| 欧美不卡在线视频| 亚洲国产成人久久综合一区| 久久久久久久久久看片| 国产丝袜一区二区| 亚洲欧美一区二区激情| 欧美天天综合网| 一区二区三区日韩精品视频| 欧美成人三级在线| 亚洲电影在线免费观看| 久久婷婷蜜乳一本欲蜜臀| 韩国精品主播一区二区在线观看| 欧美一区二区观看视频| 国产日产欧产精品推荐色| 性视频1819p久久| 国产欧美日韩91| 久久超碰97人人做人人爱| 国产日韩欧美不卡| 欧美在线1区| 国产又爽又黄的激情精品视频| 午夜在线精品偷拍| 国产日韩欧美夫妻视频在线观看| 午夜精品一区二区三区在线视| 国产精品你懂的在线| 午夜精品999| 国产欧美日韩在线播放| 欧美在线观看一区| 国际精品欧美精品| 久久人体大胆视频| 亚洲国产欧美国产综合一区| 欧美劲爆第一页| 99国产精品| 国产精品海角社区在线观看| 亚洲综合欧美日韩| 国产丝袜一区二区| 另类激情亚洲| 亚洲精品美女久久久久| 欧美日韩一级黄| 亚洲欧美日韩一区二区在线| 国产丝袜一区二区| 免费亚洲一区二区| 一本久久a久久免费精品不卡| 欧美亚洲成人免费| 亚洲欧美色一区| 国产综合18久久久久久| 美女视频黄a大片欧美| 日韩一级不卡| 国产精品三级久久久久久电影| 久久成人精品电影| 亚洲国产精品久久久久婷婷884| 欧美日产一区二区三区在线观看 | 99视频有精品| 国产精品夜夜嗨| 久久人人爽国产| 99re6这里只有精品| 国产精品视频xxxx| 久久一二三四| 一本色道久久综合狠狠躁篇的优点| 国产精品扒开腿爽爽爽视频| 久久不射2019中文字幕| 亚洲国产另类 国产精品国产免费| 欧美日韩精品免费看| 性xx色xx综合久久久xx| 一区二区在线观看视频在线观看| 欧美激情2020午夜免费观看| 亚洲一区日本| 在线观看欧美精品| 欧美视频导航| 久久精品国产免费观看| 亚洲人成7777| 国产免费观看久久黄| 欧美成人a∨高清免费观看| 亚洲天堂成人在线视频| 激情久久久久久| 欧美天堂在线观看| 国产片一区二区| 欧美成人一区二免费视频软件| 亚洲性感激情| 在线观看三级视频欧美| 欧美四级伦理在线| 久久深夜福利免费观看| 一区二区三区色| 一区在线影院| 国产精品嫩草影院av蜜臀| 免费视频一区二区三区在线观看| 中文久久乱码一区二区| 在线观看日韩www视频免费 | 欧美视频观看一区| 久久久久国内| 亚洲先锋成人| 亚洲激情影视| 国产综合色产| 国产精品videosex极品| 裸体素人女欧美日韩| 亚洲欧美另类久久久精品2019| 亚洲国产欧美日韩| 国产日韩欧美精品一区| 欧美日韩高清在线观看| 久久亚洲精品一区二区| 午夜久久电影网| 一本色道久久综合亚洲精品不 | 欧美精品入口| 久久阴道视频| 欧美一区视频在线| 亚洲一区三区电影在线观看| 91久久久久久久久| 一区精品在线播放| 国产农村妇女精品一二区| 欧美色图麻豆| 欧美精品免费播放| 免费成人av在线| 久久久久久亚洲精品中文字幕 | 亚洲免费大片| 亚洲福利视频网| 精品av久久久久电影| 国产日韩在线一区| 国产精品女主播| 欧美特黄一区| 欧美日韩免费一区二区三区| 欧美承认网站| 欧美成人精品福利| 久久综合狠狠综合久久综青草 | 欧美成人免费全部| 葵司免费一区二区三区四区五区| 欧美在线|欧美| 午夜视频久久久| 亚洲一区二区日本| 一区二区三区四区五区在线| 亚洲精品国产精品乱码不99按摩| 激情成人av在线| 一区在线播放视频| 激情欧美一区二区| 国产日韩在线播放| 国产日韩欧美制服另类| 国产欧美欧美| 国产精品日韩在线观看| 国产精品国产三级欧美二区 | 欧美视频在线观看 亚洲欧| 欧美日韩国产黄| 欧美日韩亚洲一区二区三区在线| 欧美日韩成人在线| 欧美日韩免费观看一区|