搜尋
首頁web前端js教程TypeScript 如何讓 React 變得更好:更流暢的開發者體驗,更少的錯誤(以 useState 為例)

讓我們從一個場景和與之相關的任務開始。

我們有一個帶有狀態欄的訊息應用程序,可以顯示用戶的當前狀態並允許他們更新它。我們必須新增一個下拉式選單,使用者可以從中變更其狀態,並使用 useState() 在 UI 中顯示和更新使用者的目前狀態。

為了簡單起見,我們在本文中僅關注 useState 實現,在本文結束時,您將了解即使對於一個簡單的範例,TypeScript 也是一個更強大的選項。

任務

我們必須定義一個 useState() 來儲存和更新 userStatus,並使用五個可能的狀態選項之一進行初始化(假設 active)。

所有可能的選項是:

  1. 活躍(活躍)
  2. 離開(離開)
  3. 請勿打擾(dnd)
  4. 請假(請假)
  5. 外出 (OOO)

JSX/JS

這是一個非常簡單的任務,對吧?我們要做的就是定義一個 useState 並將其初始化為 active,然後使用 set 函數更新狀態,我們就完成了。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

但是等等!當有人審查我的代碼或稍後訪問這段代碼時(例如 1 週、2 週、1 個月、6 個月或其他時間後)會發生什麼,他們如何知道所有可能/有效的選項是什麼?

啊啊!是的,我們可以在 useState 旁邊添加註釋,讓他們知道這些都是可能的選項。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

但是,這不是一個好的解決方案,對吧?那麼,我們該如何改進呢?

對象查找

物件查找對於我們的問題來說是一個非常好的解決方案。因此,讓我們從定義一個名為 UserStatus 的物件查找開始,並使用它來設定我們的 userStatus 值。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

現在,讓我們更新 useState 定義。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

現在,讓我們嘗試更新狀態。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

哦!看看,現在我們在編輯器中獲得了自動完成功能,並且可以透過查看 UserStatus 的定義來檢查 userStatus 的所有可能/有效值。

對象查找的問題

儘管物件查找方法似乎解決了我們的問題,並且絕對是比僅添加註釋更好的解決方案,但它仍然存在兩個主要問題:

  1. 對於以後訪問我們的程式碼的任何人,他們必須知道我們正在使用物件查找來設定我們的狀態。這可能看起來微不足道,但想像一下,隨著我們的組件增長並變得更加複雜,那麼有人很容易不知道我們的實現。
  2. 它仍然不能阻止任何人為我們的狀態設定任何隨機值,即使他們知道物件查找。  

那麼,我們該如何解決這些問題呢?
答案:打字稿

多倫多證券交易所/TS

讓我們重新開始我們的解決方案,但這次是在 .tsx 或 Typescript 檔案中。我們可以先定義一個 useState() 函數並使用值來初始化:active

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

現在看起來沒有什麼不同,但事實確實如此。讓我們更新 userStatus 值。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

啊啊!正如您所看到的,它在一些設定函數周圍給了我們可怕的紅色波浪線錯誤線,但在我們設定字串值的函數上卻沒有。這是因為 Typescript 從初始值(即字串類型)推斷我們狀態的類型。

是的,這將阻止我們為userStatus 狀態設定任何非字串值,但它仍然不會阻止我們設定任何隨機字串值,而且我們仍然必須使用物件查找來記錄所有可能的選項,你可能會問。
 

讓我們來做一些「一舉兩得」。

顯式類型和泛型

在Typescript 中,我們可以建立自訂類型,它也支援泛型,它可以在React 中用於其鉤子定義,在我們的例子中是useState () 鉤子。

讓我們在 React 元件中建立一個新的 UserStatus 類型。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

現在,讓我們在 useState 定義中使用此類型。

How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

到目前為止,一切看起來都與我們在物件尋找方法中所做的類似,但 Typescript 的神奇之處在於我們開始使用 set 函數和狀態值。

  1. 取得 userStatus 的型別定義。
    How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

  2. setUserStatus 函數的自動完成。
    How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

  3. 對有效值和無效值進行正確驗證。
    How TypeScript Makes React Better: Smoother Developer Experience, Fewer Bugs (With a useState Example)

看那個,

  1. 我們只需將滑鼠懸停在 userStatus 上並查找其類型定義即可取得所有有效值的文件。
  2. 但是,在使用 set 函數時,我們不需要查看狀態值的類型定義,因為它會自動為我們提供所有有效選項的自動完成功能。
  3. 現在,它不僅會在設定非字串值時給我們帶來錯誤,還會為我們使用無效字串值帶來錯誤(即,它總是會因無效輸入而給出錯誤)。

結論

現在,您可能已經很好地感受到了 TypeScript 如何真正增強我們的開發體驗。我們在這裡僅通過一個簡單的示例觸及了表面,但想想我們正在構建的實際應用程序,使用 TypeScript 可能意味著更少的錯誤和更好的開發人員整體體驗。

我希望這篇文章能夠鼓勵您開始在所有 React 應用程式中使用 Typescript 並建立出色的 Web 體驗。

如果您喜歡這篇文章並想聯繫我,那麼您可以在 Linked 和 X/Twitter 上與我聯繫

以上是TypeScript 如何讓 React 變得更好:更流暢的開發者體驗,更少的錯誤(以 useState 為例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具