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

React全新實驗性Hooks:UseOptimistic、UseFormStatus

開發 前端
UseFormStatus Hook 可以用于實現加載指示器等功能。可以把它當作使用 UseTransition Hook 實現加載狀態的一種快捷方式。目前,該 Hook 僅在實驗性通道中提供,會在接近穩定版本發布時分享文檔。

近日,React 中引入了兩個實驗性 Hooks:useOptimistic 和 useFormStatus,下面就分別來這兩個 Hooks 都有什么用處!

useOptimistic

實驗性 useOptimistic Hooks 提供了一種在應用中實現樂觀更新的方法。樂觀更新是一種通過使應用看起來響應更快來增強用戶體驗的技術。

在實際場景中,往往會遇到一些需要與服務器進行異步交互的情況,比如消息發送。為了提升用戶體驗,在這類操作中,我們通常希望優先顯示新數據或新狀態,而不是等待服務器返回響應后再進行更新。這樣做可以讓用戶立即感知到自己的操作已經被執行,降低等待時間和不確定性。

useOptimistic 鉤子就是為了支持這種優化而設計的。當組件通過該鉤子創建一個新狀態時,可以指定一個函數,用于在每次更新狀態時生成一個新的狀態數組。這個函數可以在新狀態中添加一些臨時數據,比如正在發送的消息等。同時,將這些臨時數據展示給用戶,使其可以及時地感知到自己的操作已經被執行,從而提高交互體驗。

來看下面的例子:

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>
  );
}

這段代碼實現了消息展示和發送功能。

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

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

useFormStatus

實驗性 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>
  );
}

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

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

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

useFormStatus Hook 可以用于實現加載指示器等功能。可以把它當作使用 useTransition Hook 實現加載狀態的一種快捷方式。目前,該 Hook 僅在實驗性通道中提供,會在接近穩定版本發布時分享文檔。它內部實現使用 startTransition 和 context 對象。這是理解其行為的一種好方法,但實際的實現細節未來可能會有所改變。

責任編輯:姜華 來源: 前端充電寶
相關推薦

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頁面

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開發

2019-03-13 10:10:26

React組件前端

2013-04-26 09:07:33

2012-03-30 10:23:46

HTML5WEBJS

2024-10-15 13:45:36

2024-07-19 13:13:51

微軟模型電子表格

2022-03-31 17:54:29

ReactHooks前端

2022-08-21 09:41:42

ReactVue3前端

2020-09-19 17:46:20

React Hooks開發函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线观看免费 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 福利视频网站 | 精品国产成人 | 综合久久色 | 日韩亚洲一区二区 | 免费国产视频 | 国产一级视频在线播放 | 亚洲国产精品视频 | 综合色影院| 亚洲一区视频在线 | 国产中文字幕av | 99色视频| 久久a久久 | 9久9久| 日韩精品视频在线 | 欧美三级电影在线播放 | 男人的天堂亚洲 | 午夜影院黄 | 欧美视频第三页 | 欧美一区二区三区在线观看视频 | 特级生活片 | 天天久久| 欧美亚洲网站 | 国产亚洲网站 | 日日干天天操 | 亚洲一区二区在线视频 | 天天天插 | 丁香五月网久久综合 | 国产精品久久久久久久久久久久久 | 欧美日韩在线免费观看 | 国产精品一区久久久 | 男人的天堂久久 | 久久九九色 | 欧美一级大片免费观看 | 国产精品精品视频一区二区三区 | 国精品一区 | 免费观看羞羞视频网站 | 伊人伊人| 黄色毛片免费看 | 国产精品免费一区二区三区 |