generouted: 生成式的 + Vite + File based 路由
可作用于 react-router 的生成式路由
01 安装依赖
安装依赖包
yarn add @generouted/react-router react-router-dom
02 配置 vite
对应的 vite 插件,会生成
./router.tsx
文件,这个不要修改
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import generouted from '@generouted/react-router/plugin';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react(), generouted()],
resolve: { alias: { '@': '/src' } },
server: {
host: '0.0.0.0'
}
});
03 针对 react browser router
main.tsx 入口文件
// src/main.tsx
import { createRoot } from 'react-dom/client'
import { Routes } from '@generouted/react-router'
createRoot(document.getElementById('root')!).render(<Routes />)
04 针对 hash router
相对更加通用的写法
src/main.tsx
import { createRoot } from 'react-dom/client'
import { RouterProvider, createHashRouter } from 'react-router-dom'
import { routes } from '@generouted/react-router'
const router = createHashRouter(routes)
const Routes = () => <RouterProvider router={router} />
createRoot(document.getElementById('root')!).render(<Routes />)
05 路由相关 cheatsheet
路由语法参考
File | Path | Convention |
---|---|---|
| Pathless Layout group | |
|
| Regular route |
|
| Regular route |
| Ignored route by an ignored directory | |
| Ignored route by an ignored directory | |
|
| Dynamic catch-all route |
|
| Dynamic route |
| Layout for /blog routes | |
|
| Index route |
|
| Regular route |
|
| Optional dynamic route segment |
|
| Optional dynamic route segment |
|
| Optional static route segment |
|
| Modal route |
|
| Custom 404 (optional) |
| Custom app layout (optional) | |
| Ignored route | |
|
| Regular route |
|
| Route without /blog layout |
|
| Index route |