LoginSignup
0
0

More than 1 year has passed since last update.

React RouterのuseParamsがcssの設定を初期化しやがって10時間苦しんだ話

Last updated at Posted at 2021-09-08

ReactRouterのドキュメントにあるuseParams1をそのまま試しても自分のプロジェクトではうまく動作しませんでした。

試したコードは以下になります。

index.tsx
import React from "react";
import ReactDOM from "react-dom";
import {
  BrowserRouter as Router,
  Switch,
  Route,
  useParams
} from "react-router-dom";

function BlogPost() {
  let { slug } = useParams();
  return <div>Now showing post {slug}</div>;
}

function HomePage() {
  return <div>HomePage</div>;
}

ReactDOM.render(
  <Router>
    <Switch>
      <Route exact path="/">
        <HomePage />
      </Route>
      <Route path="/blog/:slug">
        <BlogPost />
      </Route>
    </Switch>
  </Router>,
  document.getElementById("root")
);

HomePage(/)だとreset.cssが効いて、自分で定義していた全体に反映されるindex.cssも効いていました。
ところが、BlogPost(/blog/hello-world)に遷移した時にどちらのcssも効かなくなってしまっていました。

自分で定義したcss(reset.cssとindex.css)はpublicフォルダ内に保存されていて、index.html内で適用されていました。

暫定的な解決方法

index.cssとreset.cssをindex.tsx内で呼び出すようにしてうまくcssが適用されるようになりました。

index.tsx
import React from "react";
import ReactDOM from "react-dom";
import {
  BrowserRouter as Router,
  Switch,
  Route,
  useParams
} from "react-router-dom";
import "./index.css";
import "./reset.css";

function BlogPost() {
  let { slug } = useParams();
  return <div>Now showing post {slug}</div>;
}

function HomePage() {
  return <div>HomePage</div>;
}

ReactDOM.render(
  <Router>
    <Switch>
      <Route exact path="/">
        <HomePage />
      </Route>
      <Route path="/blog/:slug">
        <BlogPost />
      </Route>
    </Switch>
  </Router>,
  document.getElementById("root")
);

0
0
0

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
0
0