成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

React全新實(shí)驗(yàn)性Hooks:UseOptimistic、UseFormStatus

開(kāi)發(fā) 前端
UseFormStatus Hook 可以用于實(shí)現(xiàn)加載指示器等功能。可以把它當(dāng)作使用 UseTransition Hook 實(shí)現(xiàn)加載狀態(tài)的一種快捷方式。目前,該 Hook 僅在實(shí)驗(yàn)性通道中提供,會(huì)在接近穩(wěn)定版本發(fā)布時(shí)分享文檔。

近日,React 中引入了兩個(gè)實(shí)驗(yàn)性 Hooks:useOptimistic 和 useFormStatus,下面就分別來(lái)這兩個(gè) Hooks 都有什么用處!

useOptimistic

實(shí)驗(yàn)性 useOptimistic Hooks 提供了一種在應(yīng)用中實(shí)現(xiàn)樂(lè)觀更新的方法。樂(lè)觀更新是一種通過(guò)使應(yīng)用看起來(lái)響應(yīng)更快來(lái)增強(qiáng)用戶體驗(yàn)的技術(shù)。

在實(shí)際場(chǎng)景中,往往會(huì)遇到一些需要與服務(wù)器進(jìn)行異步交互的情況,比如消息發(fā)送。為了提升用戶體驗(yàn),在這類操作中,我們通常希望優(yōu)先顯示新數(shù)據(jù)或新?tīng)顟B(tài),而不是等待服務(wù)器返回響應(yīng)后再進(jìn)行更新。這樣做可以讓用戶立即感知到自己的操作已經(jīng)被執(zhí)行,降低等待時(shí)間和不確定性。

useOptimistic 鉤子就是為了支持這種優(yōu)化而設(shè)計(jì)的。當(dāng)組件通過(guò)該鉤子創(chuàng)建一個(gè)新?tīng)顟B(tài)時(shí),可以指定一個(gè)函數(shù),用于在每次更新?tīng)顟B(tài)時(shí)生成一個(gè)新的狀態(tài)數(shù)組。這個(gè)函數(shù)可以在新?tīng)顟B(tài)中添加一些臨時(shí)數(shù)據(jù),比如正在發(fā)送的消息等。同時(shí),將這些臨時(shí)數(shù)據(jù)展示給用戶,使其可以及時(shí)地感知到自己的操作已經(jīng)被執(zhí)行,從而提高交互體驗(yàn)。

來(lái)看下面的例子:

import { experimental_useOptimistic as useOptimistic } from 'react';
import { send } from './_actions.js';
 
export function Thread({ messages }) {
  const [optimisticMessages, addOptimisticMessage] = useOptimistic(
    messages,
    (state, newMessage) => [...state, { message: newMessage, sending: true }],
  );
  const formRef = useRef();
 
  return (
    <div>
      {optimisticMessages.map((m) => (
        <div>
          {m.message}
          {m.sending ? 'Sending...' : ''}
        </div>
      ))}
      <form
        action={async (formData) => {
          const message = formData.get('message');
          formRef.current.reset();
          addOptimisticMessage(message);
          await send(message);
        }}
        ref={formRef}
      >
        <input type="text" name="message" />
      </form>
    </div>
  );
}

這段代碼實(shí)現(xiàn)了消息展示和發(fā)送功能。

  • 首先定義了一個(gè)名為Thread的組件,其接收一個(gè)名為messages的屬性作為輸入,用于展示當(dāng)前線程所有消息。
  • 接下來(lái),通過(guò)useOptimistic鉤子,創(chuàng)建了一個(gè)名為optimisticMessages的新?tīng)顟B(tài)和一個(gè)名為addOptimisticMessage的回調(diào)函數(shù),用于在表單提交前更新消息列表,并支持樂(lè)觀地添加一條新消息到列表中,同時(shí)會(huì)顯示"Sending..."字樣,表示正在發(fā)送中。
  • 最后,返回了包含了消息列表和消息發(fā)送表單的元素。其中,使用了Array.map()方法遍歷optimisticMessages狀態(tài),渲染出每一條消息以及可能的"Sending..."字樣。表單元素則使用<input>標(biāo)簽定義文本輸入框,將用戶輸入的消息內(nèi)容傳遞給send()方法,并且當(dāng)表單提交時(shí),調(diào)用了addOptimisticMessage()回調(diào)函數(shù),將輸入的消息添加到消息列表中進(jìn)行展示,并在待發(fā)送狀態(tài)時(shí)顯示"Sending..."字樣。

這就是上面提到的樂(lè)觀更新,即在消息發(fā)送過(guò)程中可以先預(yù)期顯示該條消息,這樣可以使用戶的操作感受更加流暢。

useFormStatus

實(shí)驗(yàn)性 useFormStatus Hook 可以在表單操作中使用,它提供了 pending 屬性。

import { experimental_useFormStatus as useFormStatus } from 'react-dom';
 
function Submit() {
  const { pending } = useFormStatus();
 
  return (
    <input
      type="submit"
      className={pending ? 'button-pending' : 'button-normal'}
      disabled={pending}
    >
      提交
    </input>
  );
}

這段代碼使用了實(shí)驗(yàn)性的 useFormStatus Hook,它從 react-dom 庫(kù)中導(dǎo)入。useFormStatus Hook 可以在表單操作(比如提交、重置等)中使用,提供了一個(gè) pending 屬性,表示當(dāng)前是否正在處理中。在這段代碼中,將 pending 屬性用于控制 <input> 元素的 className 和 disabled 屬性。

除此之外,useFormStatus 還提供了 data, action, method 屬性:

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

useFormStatus Hook 可以用于實(shí)現(xiàn)加載指示器等功能??梢园阉?dāng)作使用 useTransition Hook 實(shí)現(xiàn)加載狀態(tài)的一種快捷方式。目前,該 Hook 僅在實(shí)驗(yàn)性通道中提供,會(huì)在接近穩(wěn)定版本發(fā)布時(shí)分享文檔。它內(nèi)部實(shí)現(xiàn)使用 startTransition 和 context 對(duì)象。這是理解其行為的一種好方法,但實(shí)際的實(shí)現(xiàn)細(xì)節(jié)未來(lái)可能會(huì)有所改變。

責(zé)任編輯:姜華 來(lái)源: 前端充電寶
相關(guān)推薦

2024-07-16 09:51:39

HTMLHookReact

2023-12-04 18:24:17

WaylandLinux

2009-11-30 10:15:12

DellChrome OS鏡像

2021-11-17 06:01:24

谷歌Chrome 瀏覽器

2019-08-20 15:16:26

Reacthooks前端

2024-01-26 09:01:30

HooksReact 19版本

2023-09-13 15:16:50

2021-10-03 16:32:59

Chromeflags頁(yè)面

2021-03-18 08:00:55

組件Hooks React

2022-08-07 16:04:15

CarbonC++

2022-07-27 11:59:45

Vue3Suspense

2023-11-06 08:00:00

ReactJavaScript開(kāi)發(fā)

2019-03-13 10:10:26

React組件前端

2013-04-26 09:07:33

2022-03-31 17:54:29

ReactHooks前端

2012-03-30 10:23:46

HTML5WEBJS

2024-10-15 13:45:36

2024-07-19 13:13:51

微軟模型電子表格

2020-09-19 17:46:20

React Hooks開(kāi)發(fā)函數(shù)

2022-07-18 09:01:58

React函數(shù)組件Hooks
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 性在线| 日韩国产一区二区三区 | 最新日韩在线视频 | 日韩视频在线一区二区 | 国内av在线 | 99久久亚洲 | av午夜电影| 一区二区在线看 | 日本视频一区二区 | 国产精品视频导航 | 午夜久草 | 99中文字幕 | 在线色网 | 久色网| 99re在线视频 | 成年人网站在线观看视频 | 国产成人福利视频在线观看 | 青青草国产在线观看 | 国产91综合一区在线观看 | 99久久婷婷 | 国产在线一区二 | 一区二区三区回区在观看免费视频 | 国产福利在线 | www狠狠爱com | 天堂在线一区 | 久久国内精品 | 欧美在线小视频 | 伊人免费网 | 亚洲区在线 | 国产福利一区二区 | av毛片 | 国产精品成人一区二区三区 | 日韩欧美精品一区 | 亚洲精品乱码久久久久久蜜桃 | 欧美日韩成人影院 | 国产精品1区 | 91精品国产欧美一区二区 | 亚洲午夜精品视频 | 国产在线精品一区二区 | 伊人伊人伊人 | 中文字幕亚洲精品 |