自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

2024 年 React 生態(tài)系統(tǒng)一覽

開發(fā) 前端
對于初學 React 的開發(fā)者,首先要面臨的問題就是如何搭建一個 React 項目。市面上的工具眾多,目前最受 React 社區(qū)歡迎的是 Vite。Vite 不僅支持多種庫(如 React)與TypeScript 的結(jié)合使用,還具備出色的性能。

React 已經(jīng)經(jīng)歷了相當長的發(fā)展歷程。與此同時,一個功能全面且復(fù)雜的庫生態(tài)系統(tǒng)在 React 的基礎(chǔ)上逐漸形成。本文就來深入探討一下 2024 年你可以 React 項目中使用的庫!

創(chuàng)建新項目

對于初學 React 的開發(fā)者,首先要面臨的問題就是如何搭建一個 React 項目。市面上的工具眾多,目前最受 React 社區(qū)歡迎的是 Vite。Vite 不僅支持多種庫(如 React)與TypeScript 的結(jié)合使用,還具備出色的性能。

如果你已經(jīng)對 React 有所了解,那么可以考慮使用 Next.js 或 Remix 等其他(元)框架作為 Vite 的替代方案。Next.js 最初主要用于服務(wù)端渲染,但如今也支持靜態(tài)站點生成以及其他渲染模式。2023年,Next.js 引入了新的功能——React Server Components,這一功能將 React 組件從客戶端遷移到了服務(wù)端,從而實現(xiàn)了重大的范式轉(zhuǎn)變。

如果尋求性能卓越的靜態(tài)內(nèi)容框架,那么 Astro 是一個理想的選擇。它不僅與各種框架兼容,而且能與 React 協(xié)同工作。在將內(nèi)容發(fā)送到瀏覽器時,Astro 僅包含 HTML 和 CSS,即使使用了如 React 這樣的框架來創(chuàng)建組件。只有當這些組件變得交互式時,才會請求必要的 JavaScript。

如果你是 React 老手,并希望嘗試新的技術(shù),Nitro 或 Waku都是不錯的選擇。Waku 由 Zustand 的創(chuàng)造者開發(fā),并支持 React Server Components。

建議:

  • Vite:適用于客戶端渲染的 React 應(yīng)用
  • Next.js:適用于服務(wù)端渲染的 React 應(yīng)用
  • Astro:適用于靜態(tài)生成的 React 應(yīng)用

包管理

如果你正在尋找在 JavaScript 生態(tài)系統(tǒng)中(尤其是React)包管理工具,npm 無疑是首選,因為它與 Node.js 安裝捆綁在一起。然而,yarn 和 pnpm 也是值得考慮的優(yōu)秀替代方案。特別是 pnpm,它提供了更高的性能。

如果有多個相互依賴或共享通用UI組件的React應(yīng)用,monorepo 的概念可能值得探索。所有上述包管理器都支持使用其內(nèi)部工作區(qū)功能創(chuàng)建 monorepo,但使用 yarn 或 pnpm 時可以獲得更好的開發(fā)體驗。結(jié)合諸如 Turborepo 之類的 monorepo 管道工具,可以使整個體驗更加順暢。

建議:

  • 選擇一個包管理器并堅持使用它
  • 默認和最廣泛使用的 -> npm
  • 性能提高,但相對較新,不那么流行 -> pnpm
  • 如果需要 monorepo,使用 Turborepo。

狀態(tài)管理

React 提供了兩個用于管理本地狀態(tài)的內(nèi)置 Hooks:useState  useReducer。若要進行全局狀態(tài)管理,可以利用 React 的 useContext Hook,它能夠?qū)傩詮捻敿壗M件安全地傳遞至其子組件,從而避免了屬性傳遞的問題。

這三個 React Hooks 都賦予了開發(fā)者在 React 中實現(xiàn)強大狀態(tài)管理的能力??梢赃x擇在組件內(nèi)部使用 useState/useReducer Hook 進行協(xié)同定位,或者將它們與 useContext Hook 結(jié)合進行全局管理。

如果頻繁地使用 React 的 Context 進行全局狀態(tài)管理,那么 Zustand 可能會是你需要的工具。Zustand 允許管理全局應(yīng)用狀態(tài),任何與 Zustand 存儲連接的 React 組件都可以讀取和修改這些狀態(tài)。

盡管 Zustand 已成為社區(qū)中的主流選擇,但當需要狀態(tài)管理庫時,Redux 仍然是市場上最受歡迎的 React 狀態(tài)管理工具庫。若你選擇使用Redux,推薦你一并查看 Redux Toolkit。如果對狀態(tài)機有特別的興趣,XState 和 Zag 也是不錯的選擇。如果需要一個全局存儲,但不滿意 Zustand 或 Redux,Jotai、Recoil 或 Nano Stores 等本地狀態(tài)管理解決方案值得考慮。

建議:

  • 對于協(xié)同定位或共享狀態(tài),使用使用內(nèi)置的 useState/useReducer。
  • 若需全局狀態(tài)管理,考慮使用內(nèi)置的 useContext。
  • 對于大量的全局狀態(tài),考慮使用 Zustand 或其替代方案。

數(shù)據(jù)獲取

在處理 UI 狀態(tài)時,React 的內(nèi)置 Hook 是非常適用的。然而,當涉及到遠程數(shù)據(jù)的狀態(tài)管理(包括數(shù)據(jù)獲取和緩存)時,建議使用專門的數(shù)據(jù)獲取庫,比如TanStack Query(前身為React Query)。

雖然 TanStack Query 本身并不是一個專門的狀態(tài)管理庫,主要用于從 API 獲取遠程數(shù)據(jù),但它能夠處理所有與該遠程數(shù)據(jù)相關(guān)的狀態(tài)管理工作,包括緩存和樂觀更新。

如果在 React 中需要更專用的 GraphQL 庫,除了 TanStack Query,還可以考慮使用 Apollo Client(流行)、urql(輕量級)或 Relay(由Facebook開發(fā))。

如果希望在 Redux 中集成數(shù)據(jù)獲取和狀態(tài)管理功能,那么可以考慮使用 RTK Query,它能夠?qū)?shù)據(jù)獲取功能與 Redux 無縫集成,簡化狀態(tài)管理流程。

此外,如果同時開發(fā)前端和后端(并且兩者都使用TypeScript),那么 tRPC 是一個值得考慮的選項。tRPC 提供端到端的類型安全 API,可顯著提高開發(fā)效率和用戶體驗。當需要從前端調(diào)用后端時,可以使用類型化的函數(shù)。

建議:

  • TanStack Query(適用于REST API或GraphQL API),結(jié)合 axios 或 fetch 使用
  • Apollo Client(適用于 GraphQL API)
  • tRPC(適用于緊密耦合的客戶端-服務(wù)端架構(gòu))

路由

如果使用 Next.js 這樣的 React 框架,路由已經(jīng)處理好了。然而,如果使用的是沒有框架的React,僅用于客戶端渲染(例如 Vite 無 SSR),那么最強大和最受歡迎的路由庫是React Router。另一個新的選擇是 TanStack Router,它特別考慮了 TypeScript 的支持。

當在 React 中通過 React Router 使用客戶端路由時,在路由級別上引入代碼分割并不復(fù)雜。如果進行此類優(yōu)化,可以使用@loadable/component替換React.lazy()

建議:

  • 最常用的:React Router
  • 新興趨勢:TanStack Router
  • 主要因其一流的 TypeScript 支持

樣式

作為 React 的初學者,可以通過在 JSX 中使用樣式對象來從內(nèi)聯(lián)樣式和簡單的 CSS 開始。然而,對于實際應(yīng)用,應(yīng)避免頻繁使用這種方法。

const Headline = ({ title }) =>
  <h1 style={{ color: 'blue' }}>
    {title}
  </h1>

在React 的 JSX 中,雖然可以使用 JavaScript 動態(tài)地添加內(nèi)聯(lián)樣式,但為了保持代碼的整潔和可維護性,通常建議將大部分樣式放在外部 CSS 文件中。這樣,所有的樣式規(guī)則都可以集中在一個地方,便于管理和修改。

import './Headline.css';

const Headline = ({ title }) =>
  <h1 className="headline" style={{ color: 'blue' }}>
    {title}
  </h1>

首先,建議了解一下 CSS 模塊。作為眾多 CSS-in-CSS 解決方案中的一種,它能夠?qū)?CSS 封裝到與組件同源的模塊中。這樣一來,樣式就不用擔心會不小心泄露到其他組件中。

import styles from './style.module.css';

const Headline = ({ title }) =>
  <h1 className={styles.headline}>
    {title}
  </h1>

其次,推薦使用 Styled Components,這是眾多 CSS-in-JS 解決方案中的一種,專門為 React 設(shè)計。Styled Components(或其替代品如 emotion)允許將使用 JavaScript 創(chuàng)建的樣式與 React 組件放在同一文件或相鄰文件中。這種方法有助于保持代碼的整潔和組織性,并減少樣式的意外泄露。

import styled from 'styled-components';

const BlueHeadline = styled.h1`
  color: blue;
`;

const Headline = ({ title }) =>
  <BlueHeadline>
    {title}
  </BlueHeadline>

第三,推薦使用 Tailwind CSS,這是最流行的實用型 CSS 解決方案。它提供了預(yù)定義的 CSS 類,這使得開發(fā)人員更高效,并簡化了 React 應(yīng)用的設(shè)計系統(tǒng)。然而,使用 Tailwind CSS 需要了解所有預(yù)定義的類,并且在某些情況下可能需要冗長的內(nèi)聯(lián)樣式。

const Headline = ({ title }) =>
  <h1 className="text-blue-700">
    {title}
  </h1>

最終選擇哪種樣式方案取決于你的具體需求和偏好。目前,實用類優(yōu)先的 CSS(如Tailwind CSS)是主流趨勢。如果希望在 React 中根據(jù)條件應(yīng)用樣式,可以考慮使用像 clsx 這樣的實用庫。

建議:

  • 實用類優(yōu)先:Tailwind CSS(最流行)
  • CSS-in-CSS:CSS Modules
  • CSS-in-JS(不推薦在服務(wù)端環(huán)境中使用運行時的 CSS-in-JS,因為存在性能問題):Styled Components 或 Facebook 的 StyleX
  • CSS-in-TS(支持 TypeScript 和服務(wù)端渲染)

組件庫

對于初學者來說,親手構(gòu)建可復(fù)用的組件是極佳的學習經(jīng)驗。無論需要創(chuàng)建一個下拉菜單、選擇框、單選按鈕還是復(fù)選框,都應(yīng)該學會如何獨立地完成這些 UI 組件。

當然,如果你覺得創(chuàng)建所有組件的工作過于繁重,可以選擇使用現(xiàn)成的 UI 庫。這些庫已經(jīng)準備了許多預(yù)先構(gòu)建的組件,并且它們都遵循相同的設(shè)計原則、功能性和無障礙性標準:

  • Ant Design
  • Material UI(MUI):在自由職業(yè)項目中最受歡迎。
  • Mantine UI:2022 年最受歡迎。
  • Chakra UI:2021 年最受歡迎。
  • NextUI:基于 React Aria。
  • Park UI:基于 Ark UI。

不過,值得注意的是,UI庫的發(fā)展趨勢正朝向無樣式化轉(zhuǎn)變。這些新的庫沒有固定的樣式,但它們具備現(xiàn)代組件庫所必需的所有功能和無障礙性。它們經(jīng)常與像Tailwind這樣的實用CSS解決方案配合使用:

  • shadcn/ui:2023 年最受歡迎
  • Radix
  • React Aria
  • Catalyst
  • Daisy UI
  • Headless UI
  • Ark UI:來自 Chakra UI 制造商的庫。

盡管這些UI庫都自帶組件,但它們無法像專注于單一UI組件的庫那樣強大。例如,使用react-table-library 可以在 React 中創(chuàng)建功能強大的表格組件,同時它還提供各種主題(如Material UI),能夠輕松地與UI庫集成。

動畫

在 Web 應(yīng)用中,所有動畫都始于 CSS。但隨著需求的發(fā)展,CSS 動畫可能無法滿足需求。這時,開發(fā)人員通常會尋求動畫庫的幫助,它使你能夠使用 React 組件進行動畫操作。一些廣受好評的 React 動畫庫包括:

  • Framer Motion(最推薦)
  • react-spring
  • react-motion
  • react-move

可視化

在 React 中創(chuàng)建圖表時,開發(fā)人員通常會選擇一些預(yù)先構(gòu)建的圖表庫,以換取更高的靈活性和可定制性。然而,如果希望從頭開始創(chuàng)建圖表,那么D3是一個無法回避的選擇。它是一個基礎(chǔ)的可視化庫,提供了創(chuàng)建精美圖表所需的所有工具。

然而,由于學習 D3 需要投入大量的時間和精力,許多開發(fā)人員更傾向于選擇一個React圖表庫。這些庫提供了現(xiàn)成的圖表、強大的可組合性,并且可以根據(jù)需要進行定制。一些流行的 React 圖表庫包括:

  • Echarts
  • Recharts
  • 現(xiàn)成的圖表
  • 強大的可組合性
  • 可選定制
  • visx
  • 更傾向于低層次的 D3 而不是高層次的抽象

  • 學習難度大

  • 現(xiàn)成的圖表較多,定制難度較高

  • Victory

  • nivo

  • react-chartjs

表單

在 React 中,最受歡迎的表單庫是 React Hook Form。它提供了所需的所有功能:驗證(最受歡迎的集成是 zod)、表單提交和表單狀態(tài)管理。作為替代方案,還有 Formik 和React Final Form 可供選擇。

建議:

  • React Hook Form:與 zod 集成進行驗證

類型檢查

React 自帶了一個名為 PropTypes 的內(nèi)置屬性驗證功能。通過 PropTypes可以為 React 組件定義屬性。如果向組件傳遞了類型錯誤的屬性,將收到錯誤消息。

import PropTypes from 'prop-types';

const List = ({ list }) => (
  <div>
    {list.map((item) => (
      <div key={item.id}>{item.title}</div>
    ))}
  </div>
);

List.propTypes = {
  list: PropTypes.array.isRequired,
};

盡管 PropTypes 曾經(jīng)是 React 的一個重要組成部分,但現(xiàn)在它們已經(jīng)不再包含在 React 中了。由于歷史原因,這里仍然提到了它們,但強烈建議不要使用它。

對于現(xiàn)代的 React 應(yīng)用,行業(yè)標準是使用 TypeScript。如今,幾乎所有的新 React 項目都采用 TypeScript,因此建議你也嘗試在 React 中使用 TypeScript。

type Item = {
  id: string;
  title: string;
};

type ListProps = {
  list: Item[];
};

const List = ({ list }: ListProps) => (
  <div>
    {list.map((item) => (
      <div key={item.id}>{item.title}</div>
    ))}
  </div>
);

如果需要進行更高級的有類型表單驗證、API 驗證(例如使用 tRPC)等,可以考慮使用 Zod。

建議:

  • 如果需要 JavaScript 的類型,就使用 TypeScript。

代碼結(jié)構(gòu)

如果希望在 React 項目中采用統(tǒng)一且符合常識的代碼風格,強烈推薦使用 ESLint。ESLint是一個強大的代碼檢查工具,可以強制執(zhí)行特定的編碼標準。例如,可以配置 ESLint 來遵循流行的風格指南(如Airbnb風格指南),以確保代碼的一致性和規(guī)范性。

同時,如果希望自動化地格式化代碼,Prettier 也是一個不錯的選擇。Prettier是一個無配置項的代碼格式化工具,可以輕松集成到編輯器中。每次保存文件時,它會自動格式化代碼,使代碼更易于閱讀和維護。

ESLint 和 Prettier 可以很好地協(xié)同工作。ESLint 主要用于檢查代碼中的錯誤和潛在問題,而 Prettier 則專注于使代碼格式更加一致和易于閱讀。因此,結(jié)合使用兩者可以大大提高代碼質(zhì)量和開發(fā)效率。

另外,值得注意的是,隨著時間的推移,可能會有新的工具和技術(shù)出現(xiàn)并取代 ESLint 和 Prettier 的地位。Biome(前身為Rome)是一個值得關(guān)注的新興工具,它旨在提供一個快速且一體化的代碼檢查和格式化解決方案。

建議:

  • ESLint + Prettier
  • 給 Biome 一個機會

身份驗證

在 React 應(yīng)用中實現(xiàn)身份驗證功能時,通常涉及到用戶注冊、登錄、注銷以及可能的密碼重置和密碼更改等功能。然而,這些功能超出了 React 本身的范圍,因為實際的身份驗證邏輯通常由后端應(yīng)用程序處理。

建議使用這些身份驗證/后端即服務(wù)解決方案中的一種:

  • Lucia
  • Supabase Auth
  • Clerk
  • AuthKit
  • NextAuth
  • Firebase Auth
  • Auth0
  • AWS Cognito

后端

隨著 React 在服務(wù)端的應(yīng)用日益普及,像 Next.js、Astro 或 Remix 這樣的元框架成為了 React 項目的理想選擇。這些框架提供了構(gòu)建全棧應(yīng)用所需的一切,同時充分發(fā)揮了React的優(yōu)勢。

如果由于某些原因無法使用全棧框架,但仍然希望使用 JavaScript 或 TypeScript,那么可以考慮使用 tRPC 或 Hono。這兩者都是強大的后端解決方案,能夠與 React 前端無縫集成。

當然,我們也不能忽視那些傳統(tǒng)的后端框架。Express 框架仍然備受推崇,盡管它可能不是最前沿的技術(shù),但其穩(wěn)定性和成熟度使其成為許多項目的首選。其他值得考慮的選項包括 Fasitfy 和 Nest.js,它們都具有強大的功能和靈活性,能夠滿足各種后端需求。

數(shù)據(jù)庫

盡管 React 本身并不直接與數(shù)據(jù)庫交互,但隨著全棧 React 應(yīng)用的普及,它與數(shù)據(jù)庫的交互越來越緊密。在開發(fā) Next.js 應(yīng)用時,可能會遇到數(shù)據(jù)庫對象關(guān)系映射器(ORM)。目前最受歡迎的 ORM 是 Prisma。另一個值得考慮的選項是 Drizzle ORM。其他可用的選項包括 Kysely 和 database-js(僅適用于PlanetScale)。

選擇合適的數(shù)據(jù)庫時,Supabase 和 Firebase 是兩個流行的數(shù)據(jù)庫提供商。Supabase 提供 PostgreSQL,既可自托管也可作為付費服務(wù)使用。對于無服務(wù)器數(shù)據(jù)庫,PlanetScale、Neon 和 Xata 是值得考慮的替代方案。

測試

測試 React 應(yīng)用的核心是使用如 Jest 這樣的測試框架。Jest 提供了測試運行器、斷言庫以及其他實用的功能,滿足全面測試框架的需求。如果傾向于使用 Vite,Vitest 是一個值得考慮的 Jest 替代方案。

在測試框架中渲染 React 組件時,可以使用 react-test-renderer。這足以進行所謂的快照測試,這是通過 Jest 或 Vitest 進行的。快照測試的工作方式如下:一旦運行測試,會為 React 組件的渲染DOM元素創(chuàng)建快照。在未來的某個時間點再次運行測試時,將創(chuàng)建另一個快照,并使用它與前一個快照進行比較。如果差異不匹配,測試框架會發(fā)出警告,可以選擇接受快照或調(diào)整組件。

隨著時間的推移,你可能會發(fā)現(xiàn)自己在測試框架環(huán)境中使用React Testing Library(RTL)。RTL是一個全面的 React 測試庫,可以在測試框架環(huán)境中使用。它能夠渲染組件并模擬HTML元素上的事件。然后,可以使用測試框架進行斷言。

如果正在尋找用于 React 端到端(E2E)測試的測試工具,Playwright 和 Cypress 是最受歡迎的選擇。

建議:

  • 單元/集成測試:Vitest + React Testing Library(最受歡迎)
  • 快照測試:Vitest
  • E2E測試:Playwright 或 Cypress

不可變數(shù)據(jù)結(jié)構(gòu)

在 JavaScript 中,原生提供了許多工具來處理數(shù)據(jù)結(jié)構(gòu),使其看似不可變。但如果有必要強制使用不可變數(shù)據(jù)結(jié)構(gòu),Immer 是一個廣受歡迎的選擇。

國際化

在為 React 應(yīng)用進行國際化時,需要考慮的不僅是翻譯,還包括復(fù)數(shù)形式、日期和貨幣格式化等方面。以下是一些流行的庫,可用于處理這些問題:

  • FormatJS
  • react-i18next
  • Lingui

時間處理

當 React 應(yīng)用需要處理大量日期、時間和時區(qū)時,引入一個專門管理這些內(nèi)容的庫是很有用的。以下是一些可用的選項:

  • date-fns
  • Day.js
  • Luxon

桌面應(yīng)用

Electron 和 Tauri 是跨平臺桌面應(yīng)用的框架。

移動應(yīng)用

如果想將 React 從 Web 移植到移動平臺,React Native 仍然是最佳選擇。Expo 作為最流行的框架,可以輕松創(chuàng)建 React Native 應(yīng)用。而如果需要實現(xiàn)跨 Web 和移動端的統(tǒng)一組件,Tamagui 是一個值得考慮的方案。

文件上傳

  • react-dropzone

郵件

  • react-email
  • Mailing
  • mjml

拖拽

react-beautiful-dnd 是最受歡迎的 React 拖拽庫。dnd kit 是一個流行的替代品,它提供了更多的靈活性和選項,但學習難度也更大。在該領(lǐng)域中,react-dnd 也是一個不錯的選擇。

VR/AR

React 也可以用于開發(fā)虛擬現(xiàn)實 (VR) 和增強現(xiàn)實 (AR) 的應(yīng)用。大部分庫仍處于早期階段(實驗階段),但以下是與 React 相關(guān)的 AR/VR 庫:

  • react-three-fiber
  • react-360
  • aframe-react

文檔

在編寫組件文檔時,有許多優(yōu)秀的 React 文檔工具可供選擇:

  • Storybook
  • Docusaurus
  • Docz
  • Styleguidist

小結(jié)

React 生態(tài)系統(tǒng)可以被視為 React 的一個框架,但它保持了對 React 的靈活性。這是一個靈活的框架,可以自行決定選擇加入哪些庫??梢詮男√幹郑惶砑咏鉀Q特定問題的庫。相反,如果 React 就是所需的全部,可以只使用它,保持輕量級。

責任編輯:姜華 來源: 前端充電寶
相關(guān)推薦

2024-07-12 15:19:36

2011-12-09 11:02:52

NoSQL

2024-01-23 09:51:11

編程工具

2011-05-19 15:15:39

Oracle生態(tài)系統(tǒng)

2022-01-06 18:21:00

Hadoop生態(tài)系統(tǒng)

2015-07-02 10:30:25

Anroid生態(tài)系統(tǒng)移動

2010-05-12 11:16:00

SAP

2013-11-04 16:57:21

Hadoop大數(shù)據(jù)Hadoop生態(tài)系統(tǒng)

2023-08-03 10:17:57

JavaScripNode.jsChrome

2012-04-25 10:52:30

生態(tài)系統(tǒng)AppleGoogle

2017-08-02 13:08:30

物聯(lián)網(wǎng)生態(tài)系統(tǒng)邊緣計算

2009-12-25 14:49:55

2019-01-13 15:00:52

區(qū)塊鏈生態(tài)系統(tǒng)

2021-11-23 20:54:34

AI 生態(tài)系統(tǒng)

2022-02-25 11:09:16

區(qū)塊鏈技術(shù)生態(tài)系統(tǒng)

2024-01-15 00:07:08

JS生態(tài)系統(tǒng)

2023-10-11 15:11:08

智能建筑人工智能

2015-11-06 11:14:35

2015容器生態(tài)系統(tǒng)調(diào)查報告

2015-04-01 11:23:23

2015-06-08 12:44:58

大數(shù)據(jù)InterlAMPCamp
點贊
收藏

51CTO技術(shù)棧公眾號