我在 Github 上为我的问题准备了一个简单的测试用例:
在 RouterLayout.jsx 中,媒体查询使该图标Outlet
在窄屏幕上消失,正如您在动画屏幕截图中看到的那样,我拖动浏览器一侧以使其变小:
根布局.jsx
import { Outlet } from "react-router";
import { useMediaQuery } from "@react-hook/media-query";
import MasterList from "../components/MasterList";
export default function RootLayout() {
const isSmallScreen = useMediaQuery("(max-width: 768px)");
return (
<div
style={{
display: "flex",
justifyContent: "space-around",
alignItems: "flex-start",
}}
>
<MasterList />
{!isSmallScreen && (
<div>
<h3>Detail</h3>
<Outlet />
</div>
)}
</div>
);
}
我的问题请:
在小手机屏幕上,仅应显示主列表。当点击那里的链接时,应该显示 Page1 或其他页面,并且可以返回到主列表。这还行不通。
在大型平板电脑和计算机屏幕上,主列表和第 1 页或其他内容彼此靠近显示。这已经在我的代码中起作用了。
Link
我应该向下面的 MasterList.jsx 中的 s添加一些属性吗?
主列表.jsx
import { Link } from "react-router-dom";
const MasterList = () => {
const pages = [
{ id: 1, title: "Page 1" },
{ id: 2, title: "Page 2" },
{ id: 3, title: "Page 3" },
{ id: 4, title: "Page 4" },
];
return (
<div>
<h2>Master List</h2>
<nav>
<ul>
{pages.map((page) => (
<li key={page.id}>
<Link to={"/page" + page.id}>{page.title}</Link>
</li>
))}
</ul>
</nav>
</div>
);
};
export default MasterList;
应用程序.jsx
import {
Route,
RouterProvider,
createBrowserRouter,
createRoutesFromElements,
} from "react-router-dom";
import Page1 from "./pages/Page1";
import Page2 from "./pages/Page2";
import Page3 from "./pages/Page3";
import Page4 from "./pages/Page4";
import RootLayout from "./layouts/RootLayout";
const router = createBrowserRouter(
createRoutesFromElements(
<Route path="/" element={<RootLayout />}>
<Route path="page1" element={<Page1 />} />
<Route path="page2" element={<Page2 />} />
<Route path="page3" element={<Page3 />} />
<Route path="*" element={<Page4 />} />
</Route>
)
);
const App = () => {
return <RouterProvider router={router} />;
};
export default App;