国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

邢臺(tái)網(wǎng)站建設(shè)要多少錢揚(yáng)州百度關(guān)鍵詞優(yōu)化

邢臺(tái)網(wǎng)站建設(shè)要多少錢,揚(yáng)州百度關(guān)鍵詞優(yōu)化,湘潭市高新建設(shè)局網(wǎng)站,營(yíng)銷型網(wǎng)站建設(shè)系統(tǒng)參考文檔:react18.3.1官方文檔 一些概念: React 的 Canary 和 Experimental 頻道是 React 團(tuán)隊(duì)用于發(fā)布和測(cè)試新功能的渠道。 useActionState useActionState 是一個(gè)可以根據(jù)某個(gè)表單動(dòng)作的結(jié)果更新 state 的 Hook。 const [state, formAction, isPe…

參考文檔:react@18.3.1官方文檔

一些概念:
React 的 Canary 和 Experimental 頻道是 React 團(tuán)隊(duì)用于發(fā)布和測(cè)試新功能的渠道。

useActionState

useActionState 是一個(gè)可以根據(jù)某個(gè)表單動(dòng)作的結(jié)果更新 state 的 Hook。

const [state, formAction, isPending] = useActionState(fn, initialState, permalink?);

參數(shù)

  • fn:當(dāng)按鈕被按下或者表單被提交時(shí)觸發(fā)的函數(shù)。當(dāng)函數(shù)被調(diào)用時(shí),該函數(shù)會(huì)接收到表單的上一個(gè) state(初始值為傳入的 initialState 參數(shù),否則為上一次執(zhí)行完該函數(shù)的結(jié)果)作為函數(shù)的第一個(gè)參數(shù),余下參數(shù)為普通表單動(dòng)作接到的參數(shù)。
  • initialState :state 的初始值。任何可序列化的值都可接收。當(dāng) action 被調(diào)用一次后該參數(shù)會(huì)被忽略。
  • 可選的permalink :通常是一個(gè)布爾值或字符串,用于指示是否將當(dāng)前的狀態(tài)與 URL 進(jìn)行關(guān)聯(lián)。如果 permalink 為 true,useActionState 可能會(huì)將狀態(tài)信息保存到 URL 中,允許用戶在刷新頁(yè)面或分享鏈接時(shí)保留當(dāng)前的表單狀態(tài)。

返回

  • state:當(dāng)前的 state。第一次渲染期間,該值為傳入的 initialState 參數(shù)值。在 action 被調(diào)用后該值會(huì)變?yōu)?action 的返回值。
  • formAction:通常是一個(gè)函數(shù),用于處理表單的提交或其他動(dòng)作。它封裝了提交表單所需的邏輯,可以通過調(diào)用這個(gè)函數(shù)來觸發(fā)與服務(wù)器的交互或狀態(tài)更新。調(diào)用 formAction 后,useActionState 會(huì)根據(jù) fn 的執(zhí)行結(jié)果更新 state 和 isPending,從而反映最新的狀態(tài)。
  • isPending:指示當(dāng)前的操作(通常是表單提交或其他異步操作)是否正在進(jìn)行中

用法
假設(shè)我們要實(shí)現(xiàn)這樣一個(gè)功能:
在這里插入圖片描述
點(diǎn)擊Submit,如果First Name值為空,提示:Name is required,如果不為空,提示:User save來模擬表單提交。
如果使用useState來實(shí)現(xiàn)
在這里插入圖片描述

在這里插入圖片描述在這里插入圖片描述
如果使用useActionState來實(shí)現(xiàn)

"use client";import { useActionState } from "react";
import { saveUser } from "@/lib/actions";
export default function Home() {const [data, action, isPending] = useActionState(saveUser, undefined);return (<form style={{ display: "flex", flexDirection: "column" }} action={action}><label htmlFor="firstName">First Name</label><input id="firstName" name="firstName" /><button disabled={isPending} style={{ marginTop: ".5rem" }}>{" "}Submit</button>{data?.error && <span style={{ color: "red" }}>{data?.error}</span>}{data?.message && <span style={{ color: "green" }}>{data?.message}</span>}</form>);
}
"use server";
export async function saveUser(previousState: unknown, formData: FormData) {// Do some fetch request to save user to databaseconst firstName = formData.get("firstName") as string;await wait(1000);// Do some fetch request to save user to database await wait(1000)if (firstName === "") {return { error: "Name is required" };}return { message: "User saved" };
}function wait(duration: number) {return new Promise((res) => {setTimeout(res, duration);});
}

useActionState 返回一個(gè)包含以下值的數(shù)組:

  1. 該表單的 當(dāng)前 state,初始值為提供的 初始 state,當(dāng)表單被提交后則改為傳入的 action 的返回值。
  2. 傳入 <form> 標(biāo)簽的 action 屬性的 新 action。
  3. 一個(gè) pending state,可以在處理 action 的過程中使用它。

表單被提交后,傳入的 action 函數(shù)會(huì)被執(zhí)行。返回值將會(huì)作為該表單的新的 當(dāng)前 state。

傳入的 action 接受到的第一個(gè)參數(shù)將會(huì)變?yōu)樵摫韱蔚?當(dāng)前 state。當(dāng)表單第一次被提交時(shí)將會(huì)傳入提供的 初始 state,之后都將傳入上一次調(diào)用 action 函數(shù)的返回值。余下參數(shù)與未使用 useActionState 前接受的參數(shù)別無二致。

注意
useActionState Hook 當(dāng)前僅在 React Canary 與 experimental 渠道中可用。此外,需要一款完全支持 React 服務(wù)器組件 特性的框架才可以使用 useActionState 的所有特性。

在早期的 React Canary 版本中,這個(gè) API 是 React DOM 的一部分,稱為 useFormState。

  • 在支持 React 服務(wù)器組件的框架中使用該功能時(shí),useActionState 允許表單在服務(wù)器渲染階段時(shí)獲得部分交互性。當(dāng)不使用服務(wù)器組件時(shí),它的特性與本地 state 相同。

  • 與直接通過表單動(dòng)作調(diào)用的函數(shù)不同,傳入 useActionState 的函數(shù)被調(diào)用時(shí),會(huì)多傳入一個(gè)代表 state 的上一個(gè)值或初始值的參數(shù)作為該函數(shù)的第一個(gè)參數(shù)。

useFormStatus

useFormStatus 是一個(gè)提供上次表單提交狀態(tài)信息的 Hook。

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

參數(shù)
useFormStatus 不接收任何參數(shù)
返回
useFormStatus 返回一個(gè)包含以下屬性的 status 對(duì)象:

  • pending:布爾值。如果為 true,則表示父級(jí)<form>正在等待提交;否則為 false。
  • data:實(shí)現(xiàn)了 FormData interface 的對(duì)象,包含父級(jí)<form>正在提交的數(shù)據(jù);如果沒有進(jìn)行提交或沒有父級(jí) <form>,它將為 null。
  • method:字符串,可以是 ‘get’ 或 ‘post’。表示父級(jí) <form> 使用 GET 或 POST HTTP 方法 進(jìn)行提交。默認(rèn)情況下,<form> 將使用 GET 方法,并可以通過 method 屬性指定。
  • action:一個(gè)傳遞給父級(jí) <form> 的 action 屬性的函數(shù)引用。如果沒有父級(jí) <form>,則該屬性為 null。如果在 action 屬性上提供了 URI 值,或者未指定 action 屬性,status.action 將為 null。

用法

示例:使用從 useFormStatus 返回的狀態(tài)信息中的 data 屬性來顯示用戶正在提交的數(shù)據(jù)是什么。
UsernameForm.js:

import {useState, useMemo, useRef} from 'react';
import {useFormStatus} from 'react-dom';export default function UsernameForm() {const {pending, data} = useFormStatus();return (<div><h3>請(qǐng)求用戶名:</h3><input type="text" name="username" disabled={pending}/><button type="submit" disabled={pending}>提交  </button><br /><p>{data ? `請(qǐng)求 ${data?.get("username")}...`: ''}</p></div>);
}

App.js

import UsernameForm from './UsernameForm';
import { submitForm } from "./actions.js";
import {useRef} from 'react';export default function App() {const ref = useRef(null);return (<form ref={ref} action={async (formData) => {await submitForm(formData);ref.current.reset();}}><UsernameForm /></form>);
}

actions.js

export async function submitForm(query) {await new Promise((res) => setTimeout(res, 2000));
}

在這里插入圖片描述

注意

  • useFormStatus Hook 必須從在 內(nèi)渲染的組件中調(diào)用。
  • useFormStatus 僅會(huì)返回父級(jí) 的狀態(tài)信息。它不會(huì)返回同一組件或子組件中渲染的任何 的狀態(tài)信息。

總結(jié)

useActionState鉤子旨在無縫處理服務(wù)器操作。當(dāng)您將服務(wù)器操作傳遞給 useActionState 時(shí),它將返回一個(gè)包含錯(cuò)誤(或狀態(tài))、isPending 狀態(tài)和操作本身的對(duì)象。此設(shè)置對(duì)于管理表單提交和在返回結(jié)果之前跟蹤加載狀態(tài)特別有用。

useFormStatus鉤子旨在讓您深入了解表單的當(dāng)前狀態(tài),例如了解表單是否處于 “submitting” 狀態(tài)。這對(duì)于顯示 UI 元素(如加載指示器)或阻止多個(gè)表單提交(直到當(dāng)前提交完成)特別有用

http://m.aloenet.com.cn/news/972.html

相關(guān)文章:

  • 境外網(wǎng)站開發(fā)北京it培訓(xùn)機(jī)構(gòu)哪家好
  • 做視頻能賺錢的網(wǎng)站seoheuni
  • 如何注冊(cè)公司微信公眾號(hào)網(wǎng)站seo系統(tǒng)
  • 國(guó)外做建材的網(wǎng)站有哪些手機(jī)端競(jìng)價(jià)惡意點(diǎn)擊能防止嗎
  • 深圳做h5網(wǎng)站設(shè)計(jì)百度關(guān)鍵詞排名批量查詢工具
  • 做網(wǎng)站模塊百度一下首頁(yè)極簡(jiǎn)版
  • 福州網(wǎng)站建設(shè)公司哪家好推廣優(yōu)化師
  • dz網(wǎng)站收款即時(shí)到賬怎么做的保定網(wǎng)站建設(shè)報(bào)價(jià)
  • 貝爾利網(wǎng)站網(wǎng)絡(luò)推廣內(nèi)容
  • 描述建設(shè)一個(gè)網(wǎng)站的具體步驟制作網(wǎng)站
  • 開發(fā)一個(gè)網(wǎng)站多少錢?上海seo關(guān)鍵詞優(yōu)化
  • 做網(wǎng)站找云無限seo查詢?cè)诰€
  • 基于ASP與Access數(shù)據(jù)庫(kù)的網(wǎng)站開發(fā)東莞網(wǎng)絡(luò)推廣托管
  • 做高效能的父母網(wǎng)站金華seo扣費(fèi)
  • 幫人做網(wǎng)站要怎么賺錢嗎臨沂seo全網(wǎng)營(yíng)銷
  • 深圳做自適應(yīng)網(wǎng)站海外建站
  • 怎樣做網(wǎng)站呢河南靠譜seo電話
  • 做平面設(shè)計(jì)的一般瀏覽什么網(wǎng)站百度關(guān)鍵詞怎么做排名
  • 湖北可以做網(wǎng)站方案的公司百度軟件應(yīng)用中心
  • 石家莊seo網(wǎng)站優(yōu)化公司b2b外鏈代發(fā)
  • 微信公眾號(hào)怎么做網(wǎng)站的怎么學(xué)互聯(lián)網(wǎng)怎么賺錢
  • asp 做網(wǎng)站的缺點(diǎn)世界排名前十位
  • 小語種網(wǎng)站建設(shè)鎮(zhèn)江市網(wǎng)站
  • 做吃穿住行網(wǎng)站seo提升排名
  • 網(wǎng)站建設(shè)新零售上海百度
  • 上海網(wǎng)站備案流程app下載注冊(cè)量推廣平臺(tái)
  • wordpress頁(yè)面的排序長(zhǎng)沙百家號(hào)seo
  • 江陰 網(wǎng)站開發(fā)新東方烹飪學(xué)校學(xué)費(fèi)價(jià)目表
  • 旅游網(wǎng)站建設(shè)內(nèi)容網(wǎng)站搜索排名優(yōu)化怎么做
  • 網(wǎng)站開發(fā)中的網(wǎng)頁(yè)上傳和網(wǎng)站發(fā)布網(wǎng)站點(diǎn)擊量與排名