溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么使用不同的React hooks來解決日常所遇到的問題

發(fā)布時(shí)間:2021-10-29 10:20:19 來源:億速云 閱讀:147 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“怎么使用不同的React hooks來解決日常所遇到的問題”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么使用不同的React hooks來解決日常所遇到的問題”吧!

useFilerHook

Christopher Patty集合了一組很酷的hook函數(shù),該集合被稱為“crook.”。我個(gè)人很喜歡useFiler  Hook,因?yàn)樗茉赪eb瀏覽器中創(chuàng)建虛擬文件系統(tǒng),而且基本上該函數(shù)是利用瀏覽器的本地存儲(chǔ)來管理文檔和文檔內(nèi)容。

首先,在應(yīng)用程序中安裝“crooks”安裝包:

npm install crooks --save

現(xiàn)在,引入 crooks中的useFiler Hook:

import { useFiler } from 'crooks'

至此,已經(jīng)準(zhǔn)備好初始化hook并管理虛擬文件系統(tǒng)了。這里用一個(gè)簡單的代碼片段舉例子:

constApp= () => {        const [files, {add,remove, update, clear}] =useFiler("localStorageItem")        return (          <div>My Project</div>        )      }

如上述代碼所示,可以使用add(), remove(), update()以及clear() 方法。接下我們來學(xué)習(xí)如何使用它們。

(1) 添加文件

add() 函數(shù)接受一個(gè)必需的參數(shù)。我們需要傳遞JavaScript Object Notation(簡稱JSON)可序列化的數(shù)據(jù):

update("abc1234", "New content of file.")

注意,這個(gè)函數(shù)將會(huì)自動(dòng)為每一個(gè)新文件生成一個(gè)ID,但是用戶仍然可以通過傳遞一個(gè)整數(shù)或者一串字符串作為第二個(gè)參數(shù)來設(shè)置一個(gè)自定義ID。

(2) 更新文件

update() 方法接受兩個(gè)自變量。第一個(gè)是文件的ID,而另一個(gè)自變量則用于傳遞新數(shù)據(jù):

update("abc1234", "New content of file.")

(3) 移除文件

使用 remove() 方法傳遞文件ID以刪除它:

remove("abc1234")

(4) 清除所有文件

調(diào)用clear() 方法移除所有文件:

clear()

2. useFetch Hooks

怎么使用不同的React hooks來解決日常所遇到的問題

圖源:unsplash

Steven Persia(一位MERNStack的開發(fā)人員)編寫了很多React hooks,并將其命名為“Captain  hook.”,它們在處理日常任務(wù)時(shí)非常有用。接下來幾個(gè)hook的例子都取自他的集合。

useFetch能夠從應(yīng)用程序接口(API)提取數(shù)據(jù)。請求完成后,它將返回響應(yīng)及錯(cuò)誤。將useFetch引入項(xiàng)目:

import useFetch from "hooks/useFetch";

發(fā)出請求:

const { response, errors } = useFetch("https://api.github.com/users/torvalds/repos");

3. useHover Hook

useHover Hook也屬于“Captain  hook”合集。通常來說,該函數(shù)會(huì)跟蹤屏幕上的鼠標(biāo)光標(biāo)來檢測其是否處在特殊的元素上方。如果是,它將會(huì)觸發(fā)懸停事件。

引入useHover Hook:

import useHover from "hooks/useHover";

將其初始化:

const [hoverMe, isHovered] = useHover();

此處,hoverMe 表示特定的超文本標(biāo)記語言元素,而isHovered則包含可以在條件語句中檢查的布爾值。例如,可以這樣使用:

<div ref={hoverMe}>{isHovered ? "Hovered!" : "Hoverme!"}</div>

4. useSlugHook

Slug是每個(gè)Web項(xiàng)目中必不可少的部分。事實(shí)上,它也可以提升一個(gè)網(wǎng)站的搜索引擎優(yōu)化(Search Engine  Optimization,簡稱SEO)。

這也是Steven將useSlug 加入他“Captain  hook”合集的原因。使用useSlug可以快速將任何字符串轉(zhuǎn)化為為對SEO友好的slug。它十分智能,能夠?qū)⑷魏巫円舴?hào)(重音符號(hào))用它的標(biāo)準(zhǔn)對等音表示。例如,它能夠?qū)? &eacute; 或 &egrave; 轉(zhuǎn)化為e表示。

與往常一樣,首先需要引入這個(gè)hook:

import useSlug from "hooks/useSlug";

用法:

在初始化該hook的同時(shí),需要傳遞任意字符串(例如一個(gè)文章的名稱)作為第一個(gè)參數(shù)。結(jié)果就是它將返回一個(gè)格式正確的slug,該slug能夠立刻應(yīng)用到項(xiàng)目中。

useSlug("React Hooks! r&eacute;soudre les probl&egrave;mes quotidiens");//react-hooks-resoudre-les-problemes-quotidiens

5. useDrag和useDropHooks

有一個(gè)名為“ahooks”的開源React  Hooks庫,它是由電子商務(wù)巨頭阿里巴巴和一些志愿者共同積極開發(fā)的。在撰寫本文時(shí),該庫共有約46個(gè)hook,它們中的每個(gè)函數(shù)都聚焦于解決某一特定的問題。

這里將介紹一對hooks:useDrag 和  useDrop。你可能已經(jīng)對它們的功能有所了解,但我一定要談?wù)勊鼈儗ξ覀儗?shí)現(xiàn)HTML5的拖放功能的幫助。

先來安裝:

npm install ahooks --save

引入這個(gè)hook:

import { useDrag, useDrop } from 'ahooks';

用法:

首先,初始化useDrag 和useDrop Hook。useDrag 返回傳遞給文檔對象模型(Document Object  Model,簡稱DOM)元素的Prop。useDrop  返回傳遞給放置區(qū)域的Prop。它還能通過布爾屬性(isHovering)來通知拖動(dòng)元素是否放在了放置區(qū)域的頂部。

最后,useDrop 有四個(gè)回調(diào)函數(shù),它們依據(jù)放置項(xiàng)的類型來執(zhí)行:

  • onText

  • onFiles

  • onUri

  • onDom

const getDragProps =useDrag();             const [props, {isHovering }] =useDrop({              onText: (text, e) => {                alert(`'text: ${text}' dropped`);              },              onFiles: (files, e) => {                alert(`${files.length} file dropped`);              },              onUri: (uri, e) => {                alert(`uri: ${uri} dropped`);              },              onDom: (content: string, e) => {                alert(`custom: ${content} dropped`);              }             });

可以使用鼠標(biāo)拖動(dòng)的HTML5元素:

<div {...getDragProps(id)}>Draggable Element</div>

這是一個(gè)HTML5元素,可以在其中放置一些東西:

<div {...props}>   {isHovering ? 'Release Item Here' :'Drop Anything Here'} </div>

6. useDarkMode Hook

Craig Walker原創(chuàng)的“React Recipes”是一個(gè)很受歡迎的自定義React hooks集合,該集合中的 useDarkMode  Hook能夠?qū)崿F(xiàn)網(wǎng)站主題在明暗模式之間的切換。切換模式后,它將當(dāng)前值儲(chǔ)存在localStorage中。這意味無論在哪里打開瀏覽器,用戶偏好的模式將會(huì)被應(yīng)用于所有瀏覽器。

安裝庫:

npm install react-recipes --save

引用:

import { useDarkMode } from "react-recipes";

舉個(gè)例子,一般來說,useDarkMode() 返回結(jié)果有兩類:

  • darkMode: 當(dāng)開啟黑暗模式,布爾值為真。

  • setDarkMode:在明暗模式之間切換。

functionApp() {           const [darkMode, setDarkMode]=useDarkMode();           return (            <divclassNamedivclassName="header">              <ToggledarkModeToggledarkMode={darkMode} setDarkMode={setDarkMode} />            </div>           );         }

感謝各位的閱讀,以上就是“怎么使用不同的React hooks來解決日常所遇到的問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么使用不同的React hooks來解決日常所遇到的問題這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI