国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一個簡潔、強大、可擴展的前端項目架構(gòu)是什么樣的?

開發(fā) 前端
本文要介紹一個12.7k的開源項目,這個項目為構(gòu)建「簡潔、強大、可擴展的前端項目架構(gòu)」的方方面面給出了建議。

大家好,我卡頌。

React技術棧的一大優(yōu)勢在于 —— 社區(qū)繁榮,你業(yè)務中需要實現(xiàn)的功能基本都能找到對應的開源庫。

但繁榮也有不好的一面 —— 要實現(xiàn)同樣的功能,有太多選擇,到底選哪個?

本文要介紹一個12.7k的開源項目 —— Bulletproof React[1]。

這個項目為構(gòu)建「簡潔、強大、可擴展的前端項目架構(gòu)」的方方面面給出了建議。

Bulletproof React是什么

Bulletproof React與我們常見的腳手架(比如CRA)不同,后者的作用是「根據(jù)模版創(chuàng)建一個新項目」。

而前者包含一個完整的React全棧論壇項目:

圖片用戶登錄頁面

作者通過這個項目舉例,展示了與「項目架構(gòu)」相關的13個方面的內(nèi)容,比如:

  • 文件目錄該如何組織。
  • 工程化配置有什么推薦。
  • 寫業(yè)務組件時該怎么規(guī)范。
  • 怎么做狀態(tài)管理。
  • API層如何設計。
  • 等等......。

圖片圖片

限于篇幅有限,本文介紹其中部分觀點。

不知道這些觀點你是否認同呢?

文件目錄如何組織

項目推薦如下目錄形式:

src
|
+-- assets # 靜態(tài)資源
|
+-- components # 公共組件
|
+-- config # 全局配置
|
+-- features # 特性
|
+-- hooks # 公用hooks
|
+-- lib # 二次導出的第三方庫
|
+-- providers # 應用中所有providers
|
+-- routes # 路由配置
|
+-- stores # 全局狀態(tài)stores
|
+-- test # 測試工具、mock服務器
|
+-- types # 全局類型文件
|
+-- utils # 通用工具函數(shù)

其中,features目錄與components目錄的區(qū)別在于:

components存放全局公用的組件,而features存放「業(yè)務相關特性」。

比如我要開發(fā)「評論」模塊,「評論」作為一個特性,與他相關的所有內(nèi)容都存在于features/comments目錄下。

「評論」模塊中需要輸入框,輸入框這個通用組件來自于components目錄。

所有「特性相關」的內(nèi)容都會收斂到features目錄下,具體包括:

src/features/xxx-feature
|
+-- api # 與特性相關的請求
|
+-- assets # 與特性相關的靜態(tài)資源
|
+-- components # 與特性相關的組件
|
+-- hooks # 與特性相關的hooks
|
+-- routes # 與特性相關的路由
|
+-- stores # 與特性相關的狀態(tài)stores
|
+-- types # 與特性相關的類型申明
|
+-- utils # 與特性相關的工具函數(shù)
|
+-- index.ts # 入口

特性導出的所有內(nèi)容只能通過統(tǒng)一的入口調(diào)用,比如:

import { CommentBar } from "@/features/comments"

而不是:

import { CommentBar } from "@/features/comments/components/CommentBar

這可以通過配置ESLint實現(xiàn):

{
rules: {
'no-restricted-imports': [
'error',
{
patterns: ['@/features/*/*'],
},
],
// ...其他配置
}
}

相比于將「特性相關的內(nèi)容」都以「扁平的形式」存放在全局目錄下(比如將特性的hooks存放在全局hooks目錄),以features目錄作為「相關代碼的集合」能夠有效防止項目體積增大后代碼組織混亂的情況。

怎么做狀態(tài)管理

項目中并不是所有狀態(tài)都需要保存在「中心化的store」中,需要根據(jù)狀態(tài)類型區(qū)別對待。

組件狀態(tài)

對于組件的局部狀態(tài),如果只有組件自身以及他的子孫組件需要這部分狀態(tài),那么可以用useState或useReducer保存他們。

應用狀態(tài)

與應用交互相關的狀態(tài),比如「打開彈窗」、「通知」、「改變黑夜模式」等,應該遵循「將狀態(tài)盡可能靠近使用他的組件」的原則,不要什么狀態(tài)都定義為「全局狀態(tài)」。

以Bulletproof React中的示例項目舉例,首先定義「通知相關的狀態(tài)」:

// bulletproof-react/src/stores/notifications.ts
export const useNotificationStore = create<NotificationsStore>((set) => ({
notifications: [],
addNotification: (notification) =>
set((state) => ({
notifications: [...state.notifications, { id: nanoid(), ...notification }],
})),
dismissNotification: (id) =>
set((state) => ({
notifications: state.notifications.filter((notification) => notification.id !== id),
})),
}));

再在任何使用「通知相關的狀態(tài)」的地方引用useNotificationStore,比如:

// bulletproof-react/src/components/Notifications/Notifications.tsx
import { useNotificationStore } from '@/stores/notifications';
import { Notification } from './Notification';
export const Notifications = () => {
const { notifications, dismissNotification } = useNotificationStore();
return (
<div
>
{notifications.map((notification) => (
<Notification
key={notification.id}
notification={notification}
onDismiss={dismissNotification}
/>
))}
</div>
);
};

這里使用的狀態(tài)管理工具是zustand,除此之外還有很多可選方案:

  • context? +hooks
  • redux? +redux toolkit
  • mobx
  • constate
  • jotai
  • recoil
  • xstate

這些方案各有特點,但他們都是為了處理「應用狀態(tài)」。

服務端緩存狀態(tài)

對于從服務端請求而來,緩存在前端的數(shù)據(jù),雖然可以用上述處理「應用狀態(tài)」的工具解決,但「服務端緩存狀態(tài)」相比于「應用狀態(tài)」,還涉及到「緩存失效」、「序列化數(shù)據(jù)」等問題。

所以最好用專門的工具處理,比如:

  • react-query - REST? +GraphQL
  • swr - REST? +GraphQL
  • apollo client? -GraphQL
  • urql? -GraphQl

表單狀態(tài)

表單數(shù)據(jù)需要區(qū)分「受控」與「非受控」,表單本身還有很多邏輯需要處理(比如「表單校驗」),所以也推薦用專門的庫處理這部分狀態(tài),比如:

  • React Hook Form
  • Formik
  • React Final Form

URL狀態(tài)

URL狀態(tài)包括:

  • url params (/app/${dynamicParam})
  • query params (/app?dynamicParam=1)

這部分狀態(tài)通常是路由庫處理,比如react-router-dom。

總結(jié)

本文節(jié)選了部分Bulletproof React中推薦的方案,有沒有讓你認可的觀點呢?

歡迎在評論區(qū)交流項目架構(gòu)中的最佳實踐。

參考資料

[1]Bulletproof React:https://github.com/alan2207/bulletproof-react。

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2020-04-24 10:02:44

組件Vue組件庫

2020-09-21 08:01:35

Git操作系統(tǒng)Linux

2023-12-04 06:55:16

2022-02-15 10:45:50

軟件汽車開發(fā)

2018-01-05 08:54:09

加固型數(shù)據(jù)中心業(yè)務

2022-10-30 15:03:25

人工智能倉庫管理機器人

2017-12-17 16:53:27

云計算亞馬遜云端

2017-07-27 16:25:54

云管理公共云合并

2014-02-17 17:18:00

程序員

2013-01-31 11:51:37

開源KVM

2013-02-27 10:53:16

開源KVM

2016-12-07 18:10:08

邊緣計算

2022-06-17 08:30:00

元宇宙Meta架構(gòu)

2024-11-20 13:18:21

2015-04-08 10:40:09

2024-06-27 08:55:41

2019-01-11 10:39:24

軟件架構(gòu)虛擬空間機器人

2020-07-15 07:57:17

代碼Vue開發(fā)

2020-07-14 14:50:44

Vue代碼前端

2020-12-03 06:34:34

分支策略SIT
點贊
收藏

51CTO技術棧公眾號

99国产精品国产精品毛片| 91精品婷婷国产综合久久| 亚洲国产午夜伦理片大全在线观看网站| 日韩精品福利一区二区三区| 在线播放国产一区中文字幕剧情欧美 | 麻豆久久久久久| 国产欧美韩日| 在线成人超碰| 91免费综合在线| 99久久精品网站| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 一级视频在线免费观看| 国产精品久久国产精麻豆99网站| 欧美性大战久久久久xxx| 成人精品免费网站| 欧美日韩福利在线| 懂色av一区二区三区免费观看| 日本丰满大乳奶| 国产二区国产一区在线观看| www.国产在线视频| 久久综合九色综合97婷婷女人| 欧美精品久久久久久久免费| 久久久久久久久一| 黄色国产网站在线观看| 亚洲精品中文字幕在线观看| 最新av中文字幕| 欧美香蕉大胸在线视频观看| 国产二区视频在线观看| 欧美日韩国产片| 在线heyzo| 亚洲图片欧美午夜| 色综合视频一区二区三区日韩| 日韩一区二区精品视频| 美女久久精品| 亚洲性猛交xxxxwww| 96视频在线观看欧美| 97精品视频在线观看| 欧美gay男男猛男无套| 国产精品日韩高清| 美女网站色91| 人妻久久久一区二区三区| 国产精品麻豆久久久| 在线观看黄色片| 51午夜精品国产| 另类激情视频| 欧美黄色小视频| 91亚洲自偷观看高清| 欧美国产综合视频| 99久久综合99久久综合网站| 天堂在线观看一卡二卡三卡四卡| 日韩欧美在线观看视频| 超碰caoporn久久| 色999日韩欧美国产| 一个色免费成人影院| 99视频网站| 国产精品一品二品| 激情五月色综合亚洲小说| 91国产免费观看| 久久久一本精品| 国产第一区电影| 鲁大师成人一区二区三区| 免费看日本毛片| 欧美午夜性色大片在线观看| 日本成人三级电影| 国产精品你懂得| 国精品**一区二区三区在线蜜桃 | 欧美精品在线免费| 午夜精品视频| 无码精品a∨在线观看中文| 精品露脸国产偷人在视频| 亚洲女同志freevdieo| 欧洲成人午夜免费大片| 日韩电影在线免费| 午夜两性免费视频| 亚洲成人av片| 国产乱码精品一区二区三区四区| 日韩视频在线播放| 亚洲一区影音先锋| 123成人网| 亚洲在线一区二区| 久久久99免费| 美女91在线| 国产精品福利在线观看网址| 韩国一区二区三区| 韩日视频在线| 91精品国产色综合| 国产成人在线色| 免费观看久久久久| 国产mv免费观看入口亚洲| 国产高清在线观看免费不卡| 国产对白叫床清晰在线播放| 海角国产乱辈乱精品视频| 精品在线亚洲视频| 国产福利第一视频在线播放| 7777免费精品视频| 成人黄页在线观看| 国产盗摄精品一区二区酒店| 国产精品美腿一区在线看| 91香蕉视频污在线| 蜜桃视频www网站在线观看| 成人免费看片视频| 欧美激情资源网| 中文在线а√在线8| 国产一区不卡在线观看| 亚洲韩国一区二区三区| 国产一区 二区| 日韩a级黄色片| 精品福利一二区| 国内一区二区三区| 成片免费观看视频| 欧美激情xxxx| 成人亚洲精品久久久久软件| heyzo中文字幕在线| 国产在线一区二区三区四区| 亚洲18色成人| 你微笑时很美电视剧整集高清不卡| a级黄色一级片| 亚洲女人天堂成人av在线| 六月天综合网| fc2ppv国产精品久久| 国产精品久久久一区二区三区| 午夜视频在线观看一区二区三区| 18国产精品| 成人免费无码av| 日韩中文字幕网| 99久久夜色精品国产网站| 91国内外精品自在线播放| www.好吊操| 一个色综合导航| 成人av网站免费观看| 香蕉久久免费电影| 免费超爽大片黄| 蜜臀久久99精品久久久无需会员| 国产成人综合在线| jizz内谢中国亚洲jizz| 国产a级黄色大片| 伊人久久免费视频| 91性感美女视频| 精品999日本久久久影院| 欧美成人黑人猛交| 91精品国产网站| 亚洲成人精品影院| 国内视频精品| 午夜在线激情影院| 一区二区日本| 国产亚洲精品一区二555| www.成人网.com| 1204国产成人精品视频| 成本人h片动漫网站在线观看| 91网站免费观看| 7777精品伊人久久久大香线蕉的 | av电影天堂一区二区在线观看| 亚洲男女网站| 国产wwwxx| 国产精品永久在线| 色欧美88888久久久久久影院| 国产伦理一区| 91精品影视| 免费羞羞视频| 高清一区二区三区视频| 欧美成人精品福利| a美女胸又www黄视频久久| 中文字幕日韩高清在线| 在线播放你懂得| 日韩亚洲不卡在线| 精品中文字幕在线2019| 亚洲一区二区高清| 久久久久国产精品午夜一区| 国产精品蜜月aⅴ在线| 中文字幕免费中文| 国产一区二区三区高清| 一个色综合导航| 樱桃视频在线观看一区| 一级成人国产| 国产精品日本一区二区三区在线 | 国产色婷婷亚洲99精品小说| 国产欧美日韩影院| av观看在线| 国产视频一区二区三区在线播放 | 欧美午夜女人视频在线| 美女高潮久久久| 国产精品tv| 生活片a∨在线观看| 亚洲理论电影在线观看| 国产成人一区二区三区电影| 欧美一区二区在线观看| 久久综合九色综合欧美就去吻| 中文字幕亚洲综合久久五月天色无吗'' | 91在线观看视频| 中文精品久久| 91大神在线观看线路一区| 天堂а√在线8种子蜜桃视频 | 欧美精品免费播放| 欧美综合在线视频| 久久精品网站免费观看| 久久亚洲风情| 精品视频网站| 992tv国产精品成人影院| 国产在线电影| 999精彩视频|