麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 反應:創建使用取型自定義鉤子

反應:創建使用取型自定義鉤子

來源:千鋒教育
發布人:syq
時間: 2022-09-14 18:13:33 1663150413

  有關在 React 中創建自定義鉤子以跨所有組件使用 Fetch 的教程。

  從版本 16.8 開始,React 鉤子被正式添加到 React.js。除了內置的 Hooks 之外,我們還可以定義自己的 hook 來使用狀態和其他 React 特性,而無需編寫類。

創建使用取型自定義鉤子

  當您的組件邏輯需要由多個組件使用時,我們可以將該邏輯提取到自定義掛鉤中。例如,如果您需要從不同組件中的服務器獲取數據,則必須在每個組件中編寫 fetch 函數,然后添加用于處理加載和錯誤狀態的狀態。我們不必在每個組件中放置 fetch,而是可以創建自定義鉤子并在任何地方重用它。

  自定義鉤子以“use”前綴開頭。例如。useFetch

  步驟1

  讓我們創建一個新文件:useFetch.js

4

  在導入我們的鉤子并像任何其他鉤子一樣使用它。這是我們傳入URL以從中獲取數據的地方。現在我們可以在任何組件中重用這個自定義 Hook,從任何 URL 獲取數據。app.jsuseFetch

5

  步驟2:添加加載/錯誤狀態

  我們還可以添加附加參數和參數來指示數據是否正在獲取以及是否發生錯誤。loading error

6

  用法:

7

  步驟3:抓取“有什么”問題“?

  讓我們再看一遍這個代碼塊:

8

  一切似乎都很好,什么可能出錯?您幾乎可以在所有文章和視頻教程中找到此代碼塊。但我想在這里強調2點。如果:

  首先:服務器返回無效的 JSON 字符串

  接口 的方法 獲取 流并讀取它直到完成。它返回一個承諾,該承諾通過解析正文文本作為 的結果進行解析。json() Response Response JSON

  在第(1)行上,我們使用json()函數解析響應,但是如果服務器返回字符串而不是JSON字符串,則此塊將引發錯誤。假設我們的服務器在響應中只返回“OK”文本。

  res.status(200).send('OK')

  在這種情況下,我們將獲得成功狀態,但我們的抓取將引發錯誤:

9

  無效的 JSON 字符串

  第二:捕獲服務器錯誤

  如果服務器返回4xx或5xx狀態(例如404,500),我們仍將轉到阻止而不是阻止。因為這就是提取請求的工作方式。thencatch

  僅當發生網絡錯誤時,獲取承諾才會使用類型錯誤拒絕。由于 4xx 和 5xx 響應不是網絡錯誤,因此沒有什么可捕獲的。

  解決這些錯誤

  對于第一點,我們可以添加一個 try/catch 塊(用于和用于處理 Promise 中的錯誤的塊),如果發生錯誤,我們可以從響應中返回文本值。async/awaitcatch

10

  注意:我們在這里使用是因為我們可以使用或只能使用一次。否則,它將引發錯誤:clone json text

11

  對于第二點(處理服務器錯誤),我們需要檢查響應狀態(可以是或)。res.oktrue false

  法典

12

  最后的步驟

  將我們的承諾鏈替換為異步/等待

  添加類型腳本

  添加重新獲取選項

  有條件地獲取(不僅在組件裝載上)

  再次調用自定義掛鉤的唯一方法是在掛鉤中添加依賴項,并將其從組件中更改。useEffect

13

  例:假設每次單擊按鈕時都需要獲取數據。在按鈕單擊時,我們可以更改切換值,該值在useFetch鉤子中用作依賴項,數據將再次被提取。

14

  現在一切似乎都很好,但是如果我們需要通過單擊按鈕而不是在組件安裝時加載數據來加載數據,該怎么辦?如果我們嘗試添加如下條件,它將引發錯誤。這是因為鉤子不能在條件下使用。此代碼錯誤 ↓

15

  我們將收到此錯誤:

  Rendered more hooks than during the previous render.

  為了解決這個問題,我們可以將條件放在自定義鉤子中,而不是將其放在組件中。如果 提供了,值為 — 無需加載數據。refetchnull

17

  例子

  服務器返回一個字符串而不是 JSON。堆棧閃電戰演示

18

  通過單擊按鈕重新獲取數據。堆棧閃電戰演示

19

  在按鈕單擊而不是組件安裝時發出獲取請求。在這里,我們需要設置這將阻止在組件安裝時發送請求。param null

20

  發出發布/放置請求

21

  就是這樣。此外,我們還可以從自定義鉤子添加返回狀態代碼和錯誤消息。

  您可以在此處找到源代碼,并在此處找到堆棧閃電戰示例。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
開班信息
北京校區
  • 北京校區
  • 大連校區
  • 廣州校區
  • 成都校區
  • 杭州校區
  • 長沙校區
  • 合肥校區
  • 南京校區
  • 上海校區
  • 深圳校區
  • 武漢校區
  • 鄭州校區
  • 西安校區
  • 青島校區
  • 重慶校區
  • 太原校區
  • 沈陽校區
  • 南昌校區
  • 哈爾濱校區
主站蜘蛛池模板: 欧美zoozzooz在线观看| 两人夜晚打扑克剧烈运动| 久久依人| 新婚熄与翁公试婚小说| 最近高清中文字幕在线国语5| 日本妇乱子伦视频| 野花日本中文版免费观看| 亚洲国产日韩欧美一区二区三区| 麻豆精品不卡国产免费看| 久久电影精品| 美女张开腿男人桶| 尹人香蕉久久99天天拍欧美p7 | 波多野结衣不卡| 国产福利1000| 91蜜桃视频| 中文字字幕在线精品乱码app| 日本一道高清不卡免费| 无遮挡h肉动漫在线观看日本| 中文国产成人精品久久一区| 国产白嫩美女在线观看| 美女黄视频免费| 97av视频在线播放| 99麻豆视频| 红颜免费观看动漫完整版| 玖玖色资源站| 天天草夜夜草| 一级特黄aaa大片在| 久re这里只有精品最新地址| 国产欧美精品一区二区三区四区| 717午夜伦伦电影理论片| 日本强不卡在线观看| 好男人社区www在线观看| 乱人伦中文视频在线观看免费 | 欧美特黄视频在线观看| 国产精品国产三级国产普通话a| 久久精品精品| 日本在线高清版卡免v| 亚洲国产精品专区| 日本巨黄视频| 一二三四社区在线视频社区| 日本午夜精品一区二区三区电影|