React Router 多路由
React Router multiple Routes
您好,我正在尝试使用 React 路由器执行多条路由,但没有成功
基本上我的布局会有不同的内容
还有一个包含不同内容的仪表板,但没有成功
const HomeContent = () => {
return (
<div style={{ background: 'red', width: '100%', height: '400px' }}>
Home
</div>
);
};
const AboutContent = () => {
return (
<div style={{ background: 'blue', width: '100%', height: '400px' }}>
About
</div>
);
};
const DashBoardNav = () => {
return (
<div style={{ background: 'red', width: '100%', height: '400px' }}>
DashBoardNav
<ul>
<li>Home</li>
<li>About</li>
</ul>
</div>
);
};
const MainRoutes = () => {
const dispatch = useDispatch();
const { popUpIsOpen } = useSelector(RootState => RootState.togglePopUp);
const { sideIsOpen } = useSelector(RootState => RootState.toggleSide);
return (
<GlobalContainer>
<GlobalStyle />
<Overlay
onClick={() =>
popUpIsOpen ? dispatch(toggle()) : dispatch(toggleSide())
}
pop={popUpIsOpen ? popUpIsOpen : sideIsOpen}
/>
<Routes>
<Route path="/" element={<Header />} />
<Route path="dashboard" element={<DashBoardNav />} />
</Routes>
<Content>
<Routes>
<Route exact path="/" element={<HomeContent />}>
<Route path="about" element={<AboutContent />} />
</Route>
<Route path="dashboard" element={<> DashBoard </>}>
<Route path="about" element={<> about </>} />
</Route>
</Routes>
</Content>
<Footer />
</GlobalContainer>
);
};
export default MainRoutes;
但是我收到以下错误
我的导航栏在我的“/”中呈现正常,我的 Home 组件是这样的:
当我尝试输入“/about”路径时,我的导航栏没有出现,我的 div ABOUT(组件:AboutContent)
都不是:
基本上我需要多条路线
我有两个导航栏(一个来自加载页面和其他导航栏,一个来自仪表板)
与内容相同
看起来这里有几个问题,包括 path
属性和嵌套的 Route
组件。
我发现将 Route
包装在 Switch
中时更容易阅读代码,因此明确表示只会呈现 Route
组件之一。
这是一个完整的例子(删除了一些与问题无关的其他代码):
const MainRoutes = () => {
return (
<GlobalContainer>
<Switch>
<Route exact path="/">
<Header/>
</Route>
<Route path="/dashboard">
<DashBoardNav/>
</Route>
</Switch>
<Content>
<Switch>
<Route exact path="/">
<HomeContent/>
</Route>
<Route path="/about">
<AboutContent/>
</Route>
</Switch>
</Content>
<Footer />
</GlobalContainer>
);
};
自 React Router v4 以来,您不再嵌套路由,而是将它们保存在一个组件中。
here 是一个基本示例,与您要达到的目的相同。
<Switch>
<Route exact path="/" element={<HomeContent />} />
<Route path="/about" element={<AboutContent />} />
<Route path="/dashboard" element={<DashBoardNav />} />
</Switch>
这可以解决您的问题。基本上开关用于切换一个或多个组件。所以你需要传递确切的组件路径,它只能引用那个特定的组件。
详情请参考我的gist link.
您好,我正在尝试使用 React 路由器执行多条路由,但没有成功 基本上我的布局会有不同的内容 还有一个包含不同内容的仪表板,但没有成功
const HomeContent = () => {
return (
<div style={{ background: 'red', width: '100%', height: '400px' }}>
Home
</div>
);
};
const AboutContent = () => {
return (
<div style={{ background: 'blue', width: '100%', height: '400px' }}>
About
</div>
);
};
const DashBoardNav = () => {
return (
<div style={{ background: 'red', width: '100%', height: '400px' }}>
DashBoardNav
<ul>
<li>Home</li>
<li>About</li>
</ul>
</div>
);
};
const MainRoutes = () => {
const dispatch = useDispatch();
const { popUpIsOpen } = useSelector(RootState => RootState.togglePopUp);
const { sideIsOpen } = useSelector(RootState => RootState.toggleSide);
return (
<GlobalContainer>
<GlobalStyle />
<Overlay
onClick={() =>
popUpIsOpen ? dispatch(toggle()) : dispatch(toggleSide())
}
pop={popUpIsOpen ? popUpIsOpen : sideIsOpen}
/>
<Routes>
<Route path="/" element={<Header />} />
<Route path="dashboard" element={<DashBoardNav />} />
</Routes>
<Content>
<Routes>
<Route exact path="/" element={<HomeContent />}>
<Route path="about" element={<AboutContent />} />
</Route>
<Route path="dashboard" element={<> DashBoard </>}>
<Route path="about" element={<> about </>} />
</Route>
</Routes>
</Content>
<Footer />
</GlobalContainer>
);
};
export default MainRoutes;
但是我收到以下错误 我的导航栏在我的“/”中呈现正常,我的 Home 组件是这样的:
当我尝试输入“/about”路径时,我的导航栏没有出现,我的 div ABOUT(组件:AboutContent) 都不是:
基本上我需要多条路线
我有两个导航栏(一个来自加载页面和其他导航栏,一个来自仪表板)
与内容相同
看起来这里有几个问题,包括 path
属性和嵌套的 Route
组件。
我发现将 Route
包装在 Switch
中时更容易阅读代码,因此明确表示只会呈现 Route
组件之一。
这是一个完整的例子(删除了一些与问题无关的其他代码):
const MainRoutes = () => {
return (
<GlobalContainer>
<Switch>
<Route exact path="/">
<Header/>
</Route>
<Route path="/dashboard">
<DashBoardNav/>
</Route>
</Switch>
<Content>
<Switch>
<Route exact path="/">
<HomeContent/>
</Route>
<Route path="/about">
<AboutContent/>
</Route>
</Switch>
</Content>
<Footer />
</GlobalContainer>
);
};
自 React Router v4 以来,您不再嵌套路由,而是将它们保存在一个组件中。 here 是一个基本示例,与您要达到的目的相同。
<Switch>
<Route exact path="/" element={<HomeContent />} />
<Route path="/about" element={<AboutContent />} />
<Route path="/dashboard" element={<DashBoardNav />} />
</Switch>
这可以解决您的问题。基本上开关用于切换一个或多个组件。所以你需要传递确切的组件路径,它只能引用那个特定的组件。
详情请参考我的gist link.