3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React】useParams undefinedが返ってきてしまう

Posted at

背景

URLパラメータを取得するのに、useParamsを使えば簡単に取得できると聞いて使ってみました。

バージョン等

React : 17.0.0
react-router-dom : 5.3.0

状況

関係するRoutes,Detailの2つの関数コンポーネントについて下記。

// Routes.tsx
export default function Routes() {
  return (
    <Switch>
      <Route exact path={"/list/:detail"} component={Detail} />
    </Switch>
  );
}
// Detail.tsx
export default function Detail() {
  const { id } = useParams<{ id: string }>(); //←undefinedになってしまっていた
  const [detail, setDetail] = useState<Hoge>();

  //初期表示処理
  React.useEffect(() => {
    requestGet(`https://hogehoge/${id}`).then((res: any) => {
      setDetail(res.data);
    });
  }, [id]);

  return (
    <div>
      <p>{detail?.hoge}</p>
    </div>
  );
}

みたいな感じで、URLパラメータを取得して、それをまた別のAPI呼び出し時に渡してあげようとしてました。
しかしながら、useParamsの返り値はundefinedでした。

原因

Routes.tsxの

<Route exact path={"/list/:detail"} component={Detail} />

:detail部分と、
Detail.tsxの

const { id } = useParams<{ id: string }>();

{ id } 部分は同じでないとダメなようでした。

<Route exact path={"/list/:detail"} component={Detail} />
// ↓このように修正
<Route exact path={"/list/:id"} component={Detail} />

useParamsを使用してはいるが、propsを取得しているだけなので、別な名前だとundefinedになるのは当然でした。恥ずかしい。

参考

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?