かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Chakra-ui × React-Location でリンクを作成する Tips

React Location のリンク

import { Route, ReactLocation, Outlet , Link } from '@tanstack/react-location';
export const location = new ReactLocation();

export function App() {
  return (
    <Router routes={routes} location={location}>
      <Link to='/'>Home</Link>
      <Link to='/posts'>Posts</Link>
       <Outlet />
    </Router>
  );
}

Link コンポーネントを用い遷移先のパスを to プロパティで設定する

Chakra-ui の Link コンポーネントの as プロパティに React-Location の Link コンポーネントを指定すればOK

import { Link as ChakraLink, } from '@chakra-ui/react';
import { Link } from '@tanstack/react-location';

const MyComponent: FC = () => {
  return (
    <ChakraLink as={Link} to={path}>
      {label}
    </Button>
  );
}
import { Button } from '@chakra-ui/react';
import { Link } from '@tanstack/react-location';

const MyComponent: FC = () => {
  return (
    <Button as={Link} to={path}>
      {label}
    </Button>
  );
}

=> Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

👇

import { Button } from '@chakra-ui/react';
import { Link } from '@tanstack/react-location';

const MyComponent: FC = () => {
  return (
    <Link to={to}>
      <Button {…buttonProps} as='span'>{label}</Button>
    </Link>
  );
}

ボタンのデザインだけ使いたいので as="span" などで button 以外にしおくのがと良いと思う

所感

Next.js では as を使えば良かったのですが React-Location では Link と Button とで指定方法が異なっていて少し面倒でした。

React-location が @tanstack/router@beta に置き換えられているようでドキュメントも見れなくなっているので遅かれ早かれライブラリをリプレイスしたほうが良さそう

おわり