动态

详情 返回 返回

React18+Vite4+Zustand4 後台管理系統搭建🎉 - 动态 详情

前言

老闆:搞個管理系統,我明天就要。
前端:沒空,誰愛做誰做!(小聲bb)
老闆:(突然抬頭)你説什麼?
前端:好的老闆

用後端的話來説,一個管理系統而已 要不是人手不夠,後端也能做。
看吧,前端就是這麼人微言輕~ 該乾的活還是得幹。

起步

# 使用ant design pro
npm i @ant-design/pro-cli -g
pro create myapp

ok,啓動項目,完成!但真的這麼美好嗎?

問題

上面我們用了antd pro創建了一個react項目,看似很美好簡單,但其實存在以下的問題(個人觀點)

  1. 集成了dva,基於 redux 和 redux-saga 的數據流方案,dva 還額外內置了 react-router 和 fetch
  2. 項目代碼的配置、插件、組件過於繁瑣 就好比下載一個360軟件,你電腦上就會多出n個軟件的感覺
  3. 採用webpack打包,雖説umi3.5採用mfsu,但也是基於webpack5且對應的issue也是非常之多

看張圖感受一下👇

Snipaste\_2023-05-22\_11-42-41.png

這種數據流方案怎麼樣?是不是又臭又長,基本每個文件都要寫<br/>每次都要connect、dispatch,而且這種還算好的,有的更是多的離譜!

方案

基於上面種種的不爽,所以還是自己搭建一個管理系統吧,相信你項目中的代碼也會有不爽的地方可以分享下你的解決方案,歡迎下方留言探討啊🤞

技術選型

  • vite v4:下一代的前端工具鏈,為開發提供極速響應
  • react v18:react18也是更新了很多好用的hook
  • zustand v4:一個非常好用的狀態管理庫
  • react router v6
  • typescript

這裏對zustand做個簡單的瞭解,有點類似於mobx並且支持各種中間件

import { create } from 'zustand'

const useBearStore = create((set) => ({
  bears: 0,
  increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
  removeAllBears: () => set({ bears: 0 }),
}))

function BearCounter() {
  const bears = useBearStore((state) => state.bears)
  return <h1>{bears} around here ...</h1>
}

function Controls() {
  const increasePopulation = useBearStore((state) => state.increasePopulation)
  return <button onClick={increasePopulation}>one up</button>
}

這就是一個最簡單的store -> ui,是不是特別方便且是以hook的形式在組件中使用,對react技術棧的童鞋簡直不要太友好🎉,官方也橫向對比redux,Why zustand over redux? 具體可以查看官方文檔

再來看下中間件

import { create } from 'zustand'
import { persist } from 'zustand/middleware'

export const useBearStore = create(
  persist(
    (set, get) => ({
      bears: 0,
      addABear: () => set({ bears: get().bears + 1 }),
    }),
    {
      name: 'food-storage',
    }
  )
)

通過persist中間件,可以實現本地持久化存儲,刷新頁面會自動將本地數據裝載到store中。以往做法,刷新頁面取出localstorage中的數據存儲到store中,這一套下來挺繁瑣的,這樣看來是不是感覺還挺棒👏👏👏

項目地址

一個輕量級 React18 後端管理模板,旨在快速搭建後端管理系統包含基礎功能不做過渡封裝,快速擴展。家人們,咱們主打就是簡潔快速!

目錄結構

├─ public                     # 靜態資源
│   ├─ favicon.ico            # favicon圖標
├─ src                        # 項目源代碼
│   ├─ components             # 全局公用組件
│   ├─ layout                 # 佈局組件
│   ├─ config                 # 全局配置
│   │   └─ router.tsx         # 路由配置
│   ├─ services               # api接口
│   ├─ stores                 # 全局 store管理
│   ├─ utils                  # 全局公用方法
│   ├─ pages                  # pages 所有頁面
│   ├─ App.tsx                # 入口頁面
│   ├─ global.d.ts            # 全局聲明文件
│   ├─ index.css              # 全局樣式文件
│   └─index.tsx               # 源碼入口
└── .commitlintrc.js          # 自定義commitlint
└── .cz-config.js             # 自定義commitlint
└── .eslintignore             # eslint忽略文件
└── .eslintrc.js              # eslint配置
└── .prettierrc.js            # prettier配置
└── vite.config.js            # vite打包配置
└── index.html                # html模板
└── package.json              # package.json

安裝及使用

# 克隆項目
git clone https://github.com/panyushan-jade/react-template-admin.git

# 進入項目目錄
cd react-template-admin

# 安裝依賴
pnpm install(推薦使用pnpm)

# 啓動
pnpm start

# 構建
pnpm build

# 預覽build產物
pnpm preview

支持的功能

  • [√] 登錄/退出登錄
  • [√] 數據持久化存儲
  • [√] 路由鑑權
  • [√] 動態主題
  • [√] 錯誤處理
  • [√] axios 封裝

預覽

preview.gif

題外話

項目使用的是pnpm,pnpm對比npm和yarn有很明顯的優勢,建議大夥都用起來吧。不過 建議node版本14+。此外如果遇見node、pnpm、yarn等版本問題,這裏推薦一個JavaScript工具管理器 Volta。用了都知道,簡直不要太香,nvm可以換掉了。

最後

目前項目還是在迭代和維護中,肯定有很多的不足以及問題,歡迎留言及pr。非常非常非常感謝🤞🤞🤞,如果你覺得這個項目還不錯,點個 star ⭐️ 支持一下 thanks~ 項目地址

Add a new 评论

Some HTML is okay.