問題があります。サイドバーでmaterial-uiを使用していますが、ルートが機能していません。これは私のコードです:
import React, { useState } from "react";
import { NavLink as RouterLink } from "react-router-dom";
import List from "@material-ui/core/List";
import ListItem from "@material-ui/core/ListItem";
export const Sidebar = (props) => {
const { menu } = useSelector((state) => state);
const [selectedIndex, setSelectedIndex] = useState(1);
const handleListItemClick = (event, index) => {
setSelectedIndex(index);
};
return (
<List component="nav">
{menu.map((text, index) => (
<ListItem
key={text.id}
selected={selectedIndex === text.id}
onClick={(event) => handleListItemClick(event, text.id)}
component={RouterLink}
to={text.url}
button
>
.....
</ListItem>
))}
</List>
);
};
メニューをクリックすると、ページ全体が再読み込みされます。
これはHTMLです
SessionRouter-これは私がサイドバーと呼ぶコンポーネントです
AppRouter-これは私がSessionRouterを呼び出す場所です
PrivateRouteコンポーネント
助けてください。
回答 2 件
これを修正するには、合格することができます
url
にhandleListItemClick
ボタンをクリックすると、履歴ライブラリのメソッドプッシュを使用してページを変更できます。const handleListItemClick = (event, index, url) => { setSelectedIndex(index); history.push(url); };
そして、あなたはのレンダリングを更新する必要があります
ListItem
:<ListItem key={text.id} selected={selectedIndex === text.id} onClick={(event) => handleListItemClick(event, text.id, text.url)} component={RouterLink} to={text.url} button > ..... </ListItem>;
関連した質問
- マテリアルUIで状態が変化したときに、スイッチラベルをどのように変更しますか?
- このエラーを解決する方法コンテキストでutilsが見つかりません
- material-uiでframer-motionを使用する方法は? (reactjs)(@ material-ui/core)(フレーマーモーション)
- 未定義の値を受け取る
- マテリアルUI:グローバルテーマの複数のCSSクラス
- ハードコーディングの代わりにmapを使用してコンテンツを動的に入力すると、マテリアルUIタブが機能しなくなるのはなぜですか?
- ユーザーが認証されていないときに点滅するプライベートルートに反応する
- マテリアルUIでパス名に基づいて非表示のテキストフィールド値を設定する方法
- 同じページ上の複数のReactアプリによる上書きを防ぐために、コンポーネントスタイルをインラインではなくスコープにすることはできますか?
- マテリアルUI:スライダー:最低と最高のmarkLabelのみを表示
これで、質問にさらに情報を追加しました。具体的には、
AppRouter
、PrivateRouter
そしてSessionRouter
、私はあなたの問題を再現することができました。 React RouterDom-ネストの例に基づいて答えますご覧のとおり、この例はコードと多少同じです。構造は次のとおりです。
主要コンポーネント(あなたの場合:
AppRouter
、例では:NestingExample
) とともにRouter
それはすべてを包みますSwitch
一部でRoute
の。2番目のコンポーネント(あなたの場合:
SessionRouter
、例では:Topics
)より多くの情報(あなたの場合はリンクなどのサイドバーです)と別の情報がありますSwitch
異なるRoute
最初のものからです。ページの例では
useRouteMatch
取得するにはurl
そしてそのpath
ただし、「基本ルート」は「/」であるため、これは実際には必要ありません。したがって、穴の画像を見ると、「ルーティング」構造がreact-router-domページの例とまったく同じであることがわかります。しかし、少し詳細があります。これについては、ページの例で次のことを試してみてください。NestingExample
関数を追加しますexact
「トピック」への小道具Route
、 このような:いずれかのトピックをクリックしてみると、同じ問題であることがわかります。 だから、これで、私の提案は追加することです
exact={false}
に小道具PrivateRoute
のコンポーネントAppRouter
(あなたが持っているので...rest
)