在 React 中建立自定義 Hook 的最佳技巧
react 的自定義 hooks 是從元件中刪除可重用功能的有效工具。它們支援程式碼中的 dry(不要重複)、可維護性和整潔性。但開發有用的自定義鉤子需要牢牢掌握 react 的基本思想和推薦程式。在這篇文章中,我們將討論在 react 中開發自定義鉤子的一些最佳策略,並舉例說明如何有效地應用它們。1。瞭解 hooks 的用途在深入建立自定義掛鉤之前,瞭解什麼是掛鉤以及它們存在的原因至關重要。 hooks 允許您在功能元件中使用狀態和其他 react 功能。自定義掛鉤使您能夠將元件邏輯提取到可重用的函式中,這些函式可以在多個元件之間共享。示例:基本自定義 hook這是管理計數器的自定義掛鉤的簡單示例:import { usestate } from 'react';function usecounter(initialvalue = 0) { const [count, setcount] = usestate(initialvalue); const increment = () => setcount(prevcount => prevcount + 1); const decrement = () => setcount(prevcount => prevcount - 1); const reset = () => setcount(initialvalue); return { count, increment, decrement, reset };}// usage in a component// const { count, increment, decrement, reset } = usecounter(10);登入後複製2。遵循命名約定react 有一個約定,自定義掛鉤應以“use”一詞開頭。這不僅僅是一種風格選擇——react 依賴於這個約定來自動應用鉤子規則(比如不有條件地呼叫它們)。提示:始終使用 use 來啟動自定義鉤子,以確保 react 知道它是一個鉤子。3。保持鉤子純淨自定義鉤子應該是純函式,這意味著它們不應該有修改全域性變數或直接與外部系統互動等副作用。如果需要副作用,例如進行 api 呼叫,則應使用內建 react 鉤子(如 useeffect)在鉤子內處理它們。示例:具有副作用的 hookimport { usestate, useeffect } from 'react';function usefetchdata(url) { const [data, setdata] = usestate(null); const [error, seterror] = usestate(null); const [loading, setloading] = usestate(true); useeffect(() => { const fetchdata = async () => { try { const response = await fetch(url); const result = await response.json(); setdata(result); } catch (err) { seterror(err); } finally { setloading(false); } }; fetchdata(); }, [url]); return { data, error, loading };}// usage in a component// const { data, error, loading } = usefetchdata('https://api.example.com/data');登入後複製4。利用現有的 hook建立自定義掛鉤時,請確保利用現有的 react 掛鉤,例如 usestate、useeffect、usecontext 等。這確保您的自定義鉤子是可組合的,並且可以與 react 的內建功能無縫協作。示例:組合 hook這是一個結合 usestate 和 useeffect 來管理本地儲存的自定義鉤子:import { usestate, useeffect } from 'react';function uselocalstorage(key, initialvalue) { const [storedvalue, setstoredvalue] = usestate(() => { try { const item = window.localstorage.getitem(key); return item ? json.parse(item) : initialvalue; } catch (error) { console.error(error); return initialvalue; } }); useeffect(() => { try { window.localstorage.setitem(key, json.stringify(storedvalue)); } catch (error) { console.error(error); } }, [key, storedvalue]); return [storedvalue, setstoredvalue];}// usage in a component// const [name, setname] = uselocalstorage('name', 'john doe');登入後複製5。可重用性和組合建立自定義掛鉤的主要原因之一是提高可重用性。一個好的自定義鉤子應該能夠跨多個元件使用,而不需要進行大量修改。此外,鉤子可以組合在一起以構建更復雜的邏輯。提示:專注於提取可能在多個元件之間重用的邏輯。6。記錄你的 hook像任何程式碼一樣,您的自定義掛鉤應該有詳細的文件記錄。包括解釋該鉤子的作用、它接受什麼引數、它返回什麼以及它可能產生的任何副作用的註釋。這使其他開發人員(以及未來的您)更容易正確理解和使用您的鉤子。示例:記錄 hook/** * usecounter * * a custom hook to manage a counter. * * @param {number} initialvalue - initial value of the counter. * @returns {object} { count, increment, decrement, reset } - current count and functions to modify it. */function usecounter(initialvalue = 0) { // implementation}登入後複製7。測試你的 hook測試對於確保您的自定義掛鉤按預期執行至關重要。使用 react-hooks-testing-library 或 jest 等測試庫為您的鉤子編寫單元測試。示例:hook 的基本測試import { renderHook, act } from '@testing-library/react-hooks';import useCounter from './useCounter';test('should increment and decrement counter', () => { const { result } = renderHook(() => useCounter(0)); act(() => { result.current.increment(); }); expect(result.current.count).toBe(1); act(() => { result.current.decrement(); }); expect(result.current.count).toBe(0);});登入後複製在整個應用程式中抽象和重用功能的一種有效技術是在 react 中使用自定義掛鉤。您可以構建可靠且可維護的鉤子,透過理解鉤子的用途、遵守命名約定、保持鉤子純淨、利用現有鉤子、保證可重用性、文件化和測試來改進您的 react 開發過程。 以上就是在 React 中建立自定義 Hook 的最佳技巧的詳細內容,更多請關注我的其它相關文章!
相關文章
- React自定義hook之:useClickOutside——判斷是否點選DOM之外區域ReactHookIDE
- react建立專案&&常見的三大HookReactHook
- react中的 Hook 使用規則ReactHook
- 自定義react-navigation的TabBarReactNavigationtabBar
- Kibana的Dev Tools中建立自定義分詞器dev分詞
- 在ASP.NET Core中建立自定義端點視覺化圖ASP.NET視覺化
- react hookReactHook
- 在Laravel 中如何自定義servicesLaravel
- WWDC 2018:建立自定義的 Instrument
- React中10種Hook的使用介紹ReactHook
- 10 個好用的自定義 React HooksReactHook
- Hook踩坑記:React Hook react-unity-webglHookReactUnityWeb
- 在.NET 6.0中自定義介面路由路由
- 在Jetbrain IDE中自定義TODO功能AIIDE
- 使用React Hooks + 自定義Hook封裝一步一步打造一個完善的小型應用。ReactHook封裝
- 自定義元件-元件的建立和引用元件
- laravel 建立自定義的artisan make命令Laravel
- Houdini - 建立自定義的button樣式
- Laravel 建立自定義的 artisan make 命令Laravel
- 建立自定義專案模板
- 【Web Components】關於自定義元件屬性在 Vue 和 React 中不同表現的探討Web元件VueReact
- 027、Vue3+TypeScript基礎,使用自定義hook,把功能計算都放到hook中精簡程式碼VueTypeScriptHook
- rxjs Observable 自定義 Operator 的開發技巧JS
- 在vue中展示自定義列名的甘特圖Vue
- 使用 Go 語言在 MacOS 建立一個自定義的命令列工具GoMac命令列
- 自定義View實用小技巧View
- flutter系列之:在flutter中自定義themesFlutter
- 企業微信hook,自定義工具,收發訊息Hook
- Hive--->建立自定義的UDTF函式Hive函式
- react hooks 如何自定義元件(react函式元件的封裝)ReactHook元件函式封裝
- 簡單實用!在Mac上自定義Safari起始頁小技巧!Mac
- 巧用GenericObjectPool建立自定義物件池Object物件
- [譯] 從 0 建立自定義元素
- XCode 建立自定義檔案模版XCode
- Iceworks 2.8.0 釋出,自定義你的 React 模板React
- 在Vue3中實現自定義指令Vue
- 自定義物件池在 Caffeine 框架中實踐物件框架
- 在Luminar 4中向天空新增自定義物件物件