@fleur/froute

中文文档
1.0.9发布于 2023/10/23MITTypeScriptESM + CJS构建来源已验证近 30 天下载 2179

React 安全而灵活的路由器

中文使用文档
文档目录8 节
  1. 特征
  2. API 概览
  3. 钩子
  4. 构成部分
  5. 开始
  6. Next.js 类似状态
  7. 为什么Frooute提供Next.js相配钩?
  8. 如何使用安全类型

CI latest BundleSize License npm

花纹

变化

框架独立路由器 React.
可同时使用Fleur / Redux (redux-thunk).

提供了 Next.js 子集 useRouter

yarn add @fleur/froute

特征

见所有实例 此规格 或者说 实例

  • 独立图书馆
    • 与 Redux 和 Fleur 合作
  • 下一个.js的路由器子集相容性(useRouter, (中文(简体) ), withRouter(中文(简体) )
  • 支持没有代码变压器的动态导入
  • 支持 Sever 侧面渲染
    • 支持预装
    • ResponseCode 财务报告和审定财务报表 Redirect 组件
  • 自定义路由分辨率( 用于 i18n 支持)
  • URL 构建器

API 概览

钩子

  • useRouter - 说吧 Next.js 子集相配钩
    • withRouter 可用
  • useFrouteRouter - 说吧 useRouter 超级集( 不兼容 Next.js ) useRouter(中文(简体) )
  • useRouteComponent
  • useBeforeRouteChange(listener: () => Promise<boolean | void> | boolean | void)
    • 它可以阻止路径返回 Promise<false> | false
折旧的APIs

以下通取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取出取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取出取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取出.. 这些特性可从下列网址获得: useFrouteRouter。 。 。 .

  • useParams
  • useLocation
  • useNavigation
  • useUrlBuilder

构成部分

  • <Link href={string} />
  • <FrouteLink to={routeDef} params={object} query={object} /> - 安全路线
  • <ResponseCode status={number} />
  • <Redirect url={string} status={number = 302}

开始

路由定义 :

export const routes = {
  index: routeOf('/').action({
    component: () => import('./pages/index'),
  }),
  user: routeOf('/users/:userId').action({
    component: () => import('./pages/user'),
    preload: (store: Store, params /* => inferred to { userId: string } */) =>
      Promise.all([ store.dispatch(fetchUser(param.userId)) ]),
  })
}

应用 :

import { useRouteComponent, ResponseCode } from '@fleur/froute'

export const App = () => {
  const { PageComponent } = useRouteComponent()

  return (
    <div>
      {PageComponent ? (
        <PageComponent /> 
      ) : (
        <ResponseCode status={404}>
          <NotFound />
        </ResponseCode>
      )}
    </div>
  )
}

用户. tsx :

import { useRouter, buildPath } from '@fleur/froute'
import { routes, ResponseCode, Redirect } from './routes'

export default () => {
  const { query: { userId } } = useRouter()
  const user = useSelector(getUser(userId))

  if (!user) {
    return (
      <ResponseCode status={404}>
        <NotFound />
      </ResponseCode>
    )
  }

  if (user.suspended) {
    return (
      <Redirect status={301} url='/'>
        This account is suspended.
      </Redirect>
    )
  }
  
  return (
    <div>
      Hello, {user.name}!
      <br />
      <Link href={buildPath(routes.user, { userId: '2' })}>
        Show latest update friend
      </Link>
    </div>
  )
}

服务器侧 :

import { createRouter } from '@fleur/froute'
import { routes } from './routes'

server.get("*", async (req, res, next) => {
  const router = createRouter(routes, {
    preloadContext: store
  })

  await router.navigate(req.url)
  await context.preloadCurrent();

  const content = ReactDOM.renderToString(
    <FrouteContext router={router}>
      <App />
    </FrouteContext>
  )

  // Handling redirect
  if (router.redirectTo) {
    res.redirect(router.statusCode, router.redirectTo)
  } else{
    res.status(router.statusCode)
  }
  
  const stream = ReactDOM.renderToNodeStream(
    <Html>
      {content}
    </Html>
  ).pipe(res)

  router.dispose()
})

客户端 :

import { createRouter, FrouteContext } from '@fleur/froute'

domready(async () => {
  const router = createRouter(routes, {
    preloadContext: store,
  });

  await router.navigate(location.href)
  await router.preloadCurrent({ onlyComponentPreload: true })

  ReactDOM.render((
      <FrouteContext router={router}>
        <App />
      </FrouteContext>
    ),
    document.getElementById('root')
  )
})

Next.js 类似状态

  • 通过兼容 API useRouter 或者说 withRouter
    • 兼容特性
      • query, (中文(简体) ), push(), (中文(简体) ), replace(), (中文(简体) ), prefetch(), (中文(简体) ), back(), (中文(简体) ), reload()
      • pathname ,但 Froute 的路径名没有调整到文件系统路由.
    • 从 Next.js 中未提供的任何类型检查( Froute 已提供,属于相容断开)
  • Next.j 不支持的特定函数喜欢 asPath, (中文(简体) ), isFallback, (中文(简体) ), basePath, (中文(简体) ), locale, (中文(简体) ), locales 财务报告和审定财务报表 defaultLocale
    • <Link /> 只有href道具兼容 但行为不兼容.
      • Froute的链接有 <a /> 键。 下一个J不是.
      • as, (中文(简体) ), passHref, (中文(简体) ), prefetch, (中文(简体) ), replace, (中文(简体) ), scroll, (中文(简体) ), shallow 目前不支持.
    • pathname 返回当前 location.pathname,不调整到组件文件路径基础路径名.
    • router.push(), (中文(简体) ), router.replace()
      • 網址 对象不支持当前
      • as 不支持参数
    • router.beforePopState 不支持
      • 使用 useBeforeRouteChange() 换钩子
    • router.events
      • 部分支持: routeChangeStart, (中文(简体) ), routeChangeComplete, (中文(简体) ), routeChangeError
        • 仅 url 或者说 err 参数.
        • 未执行 : err.cancelled 财务报告和审定财务报表 { shallow } 旗帜.
      • 未执行 : beforeHistoryChange, (中文(简体) ), hashChangeStart, (中文(简体) ), hashChangeComplete

为什么Frooute提供Next.js相配钩?

它旨在从反应-路由器或其他路由器迁移到Next.js.

弗劳特的 useRouter 旨在提供 useRouter 与 Next.js 部分兼容 useRouter,从而保证将现有的基于React Router的应用程序迁移到Next.js的中间步骤.

如何使用安全类型

在您的应用程序中使用此片段 . (正在从 Next.js 突破到 Type- Level API 兼容性)

// Copy it in-your-app/useRouter.ts
import { useRouter as useNextCompatRouter } from '@fleur/froute'
export const useRouter: UseRouter = useNextCompatRouter

用法 :

// Route definition
const routes = {
  users: routeOf('/users/:id'),
}

// Typeing to `Routes`, it's free from circular dependency
export type Routes = typeof routes

// Component
import { useRouter } from './useRouter'
import { Routes } from './your-routes'

const Users = () => {
  const router = useRouter<typeof Routes['users']>()
  router.query.id // It infering to `string`.
}

版本与发布记录

@fleur/froute 共发布 81 个版本,首次发布于 2020/12/17;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.9latest2023/10/233 年前
1.0.8dev2023/10/193 年前
1.0.8-dev2023/10/193 年前
1.0.72023/10/133 年前
1.0.62023/10/133 年前
1.0.52023/10/033 年前

其他发布通道:beta → 1.0.0-beta.12,dev → 1.0.8。

关于 @fleur/froute 的常见问题

@fleur/froute 是什么?

React 安全而灵活的路由器

如何安装 @fleur/froute?

在项目目录运行 npm install @fleur/froute,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>= 16.8.x)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@fleur/froute 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fleur/froute 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@fleur/froute 可以商用吗?

@fleur/froute 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fleur/froute 的下载量有多少?

根据 npm 官方下载统计,@fleur/froute 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,179 次,日均约 73 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fleur/froute 还在维护吗?

最新版本 1.0.9 发布于 2023/10/23(3 年前);至今共发布 81 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/12/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。