1.1.0 • Published 10 months ago

react-configurable-router v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

react-configurable-router

仿 vue-router 的 react 配置式路由,基于 react-router6,额外支持了路由元信息、路由懒加载等功能

使用

添加路由组件

使用 export default 默认导出路由组件

// home/index.tsx
export default function Home() {
  return <div>Home</div>
}

路由配置文件

// routes.ts
import { type Route } from 'react-configurable-router'

const routes: Route[] = [
  {
    path: '/',
    lazyComponent: import('@/pages/home'),
    meta: {
      data: 'any',
    },
  },
  {
    path: '/user',
    children: [
      {
        path: 'login',
        lazyComponent: import('@/pages/user/login'),
      },
    ],
  },
  {
    path: '/redirect',
    redirect: '/user/login',
  },
  {
    path: '*',
    lazyComponent: import('@/pages/not-found'),
  }
]

配置 react-router-dom

import { ConfigurableRouter } from 'react-configurable-router'
import { BrowserRouter } from 'react-router-dom'
import { createRoot } from 'react-dom/client'

const root = createRoot(document.getElementById('root'))

// **使用传统路由**
root.render(
  <BrowserRouter>
    <ConfigurableRouter routes={routes}></ConfigurableRouter>
  </BrowserRouter>,
)

获取 meta 数据

有以下方式获取 meta 数据

1. 从 props 中获取 meta 元信息

import { type PropsWithMeta } from 'react-configurable-router'

export default function (props: PropsWithMeta) {
  const { meta } = props
}

2. 使用 useMetas 获取 meta 元信息

import { useMetas } from 'react-configurable-router'

export function Component() {
  const { metas } = useMetas()
}

API

// ConfigurableRouter

interface RouterProps {
  /**
   * 路由配置
   */
  routes: Route[]
  /**
   * 路由挂载之前执行,可用于拦截路由重定向
   */
  onRouteWillMount?: OnRouteWillMount
  /**
   * 路由挂载时执行
   */
  onRouteMount?: OnRouteMount
  /**
   * 路由卸载时执行
   */
  onRouteUnmount?: OnRouteUnmount
  /**
   * 增强渲染函数,用于自定义渲染逻辑
   * 可以跟动画库结合,实现路由切换动画
   */
  render?: (children: ReactNode | null) => ReactNode
  /**
   * 路由懒加载时的loading组件
   */
  suspense?: ReactNode
  /**
   * basename
   */
  basename?: string
}

相关