Home
back

Tanstack Router メモ

id: 193, 2025-05-23

### 音声概要

・AIで生成された 音声概要になります。


### 概要

  • Tanstack RouterStart 入門メモになります。

[ 公開 2025/02/14 ]


### 構成

  • Tanstack Router
  • node 20
  • vite

### 関連


### install

npm create @tanstack/router@latest

  • dev-start
npm run start

Search Params 取得 , Tanstack Router

  • Search Paramsの取得が。難航したのでメモになります
  • react-routerより、複雑なイメージでした。

### 関連


  • 移動元、 Link タグ使います。
  • Linkタグの search属性で、パラメータを指定
  • ItemsPage.tsx
import { createFileRoute } from "@tanstack/react-router"
import { Link } from "@tanstack/react-router";


interface Item {
  id: number;
  name: string;
}

const items: Item[] = [
  { id: 1, name: "商品A" },
  { id: 2, name: "商品B" },
  { id: 3, name: "商品C" },
];

export const Route = createFileRoute("/ItemsPage")({
  component: RouteComponent,
})

function RouteComponent() {
  return (
    <div>
      <h1>商品一覧ページ</h1>
      <ul>
        {items.map((item) => (
          <li key={item.id}>
            <Link to={`/itemdetail`} 
                search={{
                  itemId: item.id,
                }}
                >
              {item.name} の詳細を見る(クエリパラメータ)
            </Link>
          </li>
        ))}
      </ul>
      <Link to="/">
        ホームページへ戻る
      </Link>
    </div>
  );
}

  • 移動先
  • ItemDetail.tsx
  • createFileRoute内で。component , validateSearch定義
  • RouteComponentで、Route.useSearch でSearch Params取り出す。
import { createFileRoute } from "@tanstack/react-router"
import { useSearch, useParams  } from "@tanstack/react-router";

type ProductSearch = {
  itemId: number
}

export const Route = createFileRoute("/ItemDetail")({
  component: RouteComponent,
  validateSearch: (search: Record<string, unknown>): ProductSearch => {
    return {
      itemId: Number(search?.itemId ?? 1),
    }
  },
})

function RouteComponent() {
  const { itemId } = Route.useSearch()
  console.log("itemId=", itemId);

  return (
  <>
    <div>itemdetail !</div>
    <hr />
    itemId = {itemId}
  </>
  )
}