#解決したいこと
現在React×Typescript×styled-components×material-uiでポートフォリオサイトを作ろうと考えています。
matterial-uiのTab,Tabs,AppBarを用いてヘッダーをを作成できたのですが、サイトのホームから他のタブに移る際の動作がおかしいです。
この問題に関連していそうなソースを一応載せておきます
App.tsx
1import { ComponentRouter } from "./router/ComponentRouter"; 2import { StylesProvider } from '@material-ui/styles'; 3import {MuiThemeProvider} from '@material-ui/core/styles' 4 5import {theme} from './assets/styles/theme' 6 7export function App (){ 8 return ( 9 <StylesProvider injectFirst> 10 <MuiThemeProvider theme={theme}> 11 <ComponentRouter /> 12 </MuiThemeProvider> 13 </StylesProvider> 14 ); 15}; 16
ComponentRouter.tsx
1import { BrowserRouter, Route, Switch } from "react-router-dom"; 2import { FC } from "react"; 3import { DefaultLayout } from "../components/templates/DefaultLayout"; 4import { HeaderOnly } from "../components/templates/HeaderOnly"; 5import { Home } from "../components/pages/Home"; 6import { Profile } from "../components/pages/Profile"; 7import { Skill } from "../components/pages/Skill"; 8import { Product } from "../components/pages/Product"; 9import { Book } from "../components/pages/study/Book"; 10import { Contact } from "../components/pages/Contact"; 11 12export const Path = { 13 home: "/", 14 profile: "/profile", 15 skill: "/skill", 16 product: "/product", 17 study: "/book", 18 contact: "/contact", 19 }; 20 21 22export const ComponentRouter:FC = () =>{ 23 return ( 24 <BrowserRouter basename={process.env.PUBLIC_URL}> 25 <Switch> 26 <Route exact path={Path.home}> 27 <DefaultLayout> 28 <Home /> 29 </DefaultLayout> 30 </Route> 31 <Route path={Path.profile}> 32 <HeaderOnly> 33 <Profile /> 34 </HeaderOnly> 35 </Route> 36 <Route path={Path.skill}> 37 <HeaderOnly> 38 <Skill /> 39 </HeaderOnly> 40 </Route> 41 <Route path={Path.product}> 42 <HeaderOnly> 43 <Product /> 44 </HeaderOnly> 45 </Route> 46 <Route path={Path.study}> 47 <HeaderOnly> 48 <Book /> 49 </HeaderOnly> 50 </Route> 51 <Route path={Path.contact}> 52 <HeaderOnly> 53 <Contact /> 54 </HeaderOnly> 55 </Route> 56 </Switch> 57 </BrowserRouter> 58 ); 59}
Header.tsx
1import styled from "styled-components"; 2import {VFC, } from "react"; 3import { Link, useHistory} from "react-router-dom"; 4 5import { Tab, Tabs, AppBar } from "@material-ui/core"; 6 7interface headerItemPropsType{ 8 id: number; 9 route: string; 10 label: string 11} 12const headerItem: headerItemPropsType[] = [ 13 { 14 id: 1, 15 route: "/", 16 label: "HOME", 17 }, 18 { 19 id: 2, 20 route: "/profile", 21 label: "PROFILE", 22 }, 23 { 24 id: 3, 25 route: "/skill", 26 label: "SKILL", 27 }, 28 { 29 id: 4, 30 route: "/product", 31 label: "PRODUCT", 32 }, 33 { 34 id: 5, 35 route: "/book", 36 label: "STUDY", 37 }, 38 { 39 id: 6, 40 route: "/contact", 41 label: "CONTACT", 42 }, 43]; 44 45export const Header: VFC = () => { 46 const history = useHistory(); 47 return ( 48 <SAppBar position="static" color="inherit"> 49 <Tabs 50 value={history.location.pathname} 51 variant="fullWidth" 52 indicatorColor="secondary" 53 centered 54 aria-label="simple tabs example" 55 > 56 {headerItem.map((val) => { 57 return ( 58 <Tab 59 label={val.label} 60 value={val.route} 61 key={val.id} 62 component={Link} 63 to={val.route} 64 /> 65 ); 66 })} 67 </Tabs> 68 </SAppBar> 69 ); 70}; 71const SAppBar = styled(AppBar)` 72 background: #193278; 73 color: #fff; 74 padding: 8px 0; 75`;
#質問内容
公開しているサイトのHOMEから他のタブに移動(書き換え)する際のみ、インジケータが滑らかに移動しません。
これがなぜなのか分かる方がいらっしゃれば回答いただけるとありがたいです。
#やったこと
material-uiのドキュメントも見たのですが、分かりませんでした。
stateを用いて書いてみたり、useLocationをしたりしたのですが変わりませんでした。
そもそもなぜインジケータが滑らかに移動しているのかがmaterial-uiにブラックボックス化されているので原因が全く分かりません。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー