Closed12

rsbuild + tanstack router メモ

nbstshnbstsh

tanstack router 組み込み

quickstart に従う

https://tanstack.com/router/latest/docs/framework/react/quick-start

nbstshnbstsh

install

pnpm add @tanstack/react-router
nbstshnbstsh

Configuration with Rsbuild

https://tanstack.com/router/v1/docs/framework/react/guide/file-based-routing#configuration-with-rspackrsbuild

install plugin

pnpm add -D @tanstack/router-plugin

Update rsbuild.config.ts

TanStackRouterRspack plugin を追加

rsbuild.config.ts
import { defineConfig } from '@rsbuild/core'
import { pluginReact } from '@rsbuild/plugin-react'
import { TanStackRouterRspack } from '@tanstack/router-plugin/rspack'

export default defineConfig({
  plugins: [pluginReact()],
  tools: {
    rspack: {
      plugins: [TanStackRouterRspack()],
    },
  },
})
nbstshnbstsh

Routes 作成

routes/__root.tsx

import { createRootRoute, Link, Outlet } from '@tanstack/react-router'
import { TanStackRouterDevtools } from '@tanstack/router-devtools'

export const Route = createRootRoute({
  component: () => (
    <>
      <div>
        <Link to="/">
          Home
        </Link>{' '}
        <Link to="/about">
          About
        </Link>
      </div>
      <hr />
      <Outlet />
      <TanStackRouterDevtools />
    </>
  ),
})

routes/index.lazy.tsx

import { createLazyFileRoute } from '@tanstack/react-router'

export const Route = createLazyFileRoute('/')({
  component: Index,
})

function Index() {
  return (
    <div>
      <h3>Welcome Home!</h3>
    </div>
  )
}

routes/about.lazy.tsx

import { createLazyFileRoute } from '@tanstack/react-router'

export const Route = createLazyFileRoute('/about')({
  component: About,
})

function About() {
  return <div >Hello from About!</div>
}
nbstshnbstsh

Routes を App に組み込み

src/app.tsx
import { RouterProvider, createRouter } from '@tanstack/react-router';

// Import the generated route tree
import { routeTree } from './routeTree.gen';

// Create a new router instance
const router = createRouter({ routeTree });

// Register the router instance for type safety
declare module '@tanstack/react-router' {
  interface Register {
    router: typeof router;
  }
}

const App = () => {
  return <RouterProvider router={router} />;
};

export default App;
nbstshnbstsh

dev server 実行

pnpm dev 

nbstshnbstsh

build & deploy

build すると "dist" directory が生成されるので、この "dist" を deploy してあげれば良い。

nbstshnbstsh

production 環境では devTools を除外

TanStackRouterDevtools を production 環境で除外したい場合は手動で実装してあげる必要ありなので注意。

https://tanstack.com/router/latest/docs/framework/react/devtools#only-importing-and-using-devtools-in-development

const TanStackRouterDevtools =
  process.env.NODE_ENV === 'production'
    ? () => null // Render nothing in production
    : React.lazy(() =>
        // Lazy load in development
        import('@tanstack/router-devtools').then((res) => ({
          default: res.TanStackRouterDevtools,
          // For Embedded Mode
          // default: res.TanStackRouterDevtoolsPanel
        })),
      )
<Suspense>
  <TanStackRouterDevtools />
</Suspense>
nbstshnbstsh

scaffolding rsbuild & tanstack router

tanstack router 側で rsbuild & tanstack router を scaffolding するコマンドが用意されてる。これで一発でここまで準備してきたものと同等のものが用意できる。

npm create @tanstack/router@latest
# or
pnpm create @tanstack/router
# or
yarn create @tanstack/router
# or
bun create @tanstack/router

https://tanstack.com/router/latest/docs/framework/react/quick-start#scaffolding-your-first-tanstack-router-project

このスクラップは2024/10/11にクローズされました