index.tsx
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
errorElement: <ErrorPage />,
},
{
path: "about",
element: <About />,
},
{
path: "speaker",
element: <Speaker />,
},
]);
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<Header />
<RouterProvider router={router} />
</React.StrictMode>
);
header.tsx
in header component has link to speaker component
error : Uncaught Error: useHref() may be used only in the context of a <Router> component.
erroe: react-dom.development.js:18687 The above error occurred in the <Link> component:
import AppBar from '@mui/material/AppBar';
import Box from '@mui/material/Box';
import Toolbar from '@mui/material/Toolbar';
import Typography from '@mui/material/Typography';
import Button from '@mui/material/Button';
import IconButton from '@mui/material/IconButton';
import MenuIcon from '@mui/icons-material/Menu';
import { Link } from 'react-router-dom';
export default function Header() {
return (
<Box sx={{ flexGrow: 1 }}>
<AppBar position="static">
<Toolbar>
<IconButton
size="large"
edge="start"
color="inherit"
aria-label="menu"
sx={{ mr: 2 }}
>
<MenuIcon />
</IconButton>
<Typography variant="h6" component="div" sx={{ flexGrow: 1 }}>
News
</Typography>
<Button color="inherit">Login</Button>
<Link to="/speaker">Speaker</Link>
</Toolbar>
</AppBar>
</Box>
);
}
CodePudding user response:
The Header
component should be rendered within a routing context provided by a router. Create a layout route that renders the Header
component and an Outlet
component for nested routes.
Example:
const router = createBrowserRouter([
{
element: (
<>
<Header />
<Outlet />
</>
),
children: [
{
path: "/",
element: <Home />,
errorElement: <ErrorPage />,
},
{
path: "about",
element: <About />,
},
{
path: "speaker",
element: <Speaker />,
},
],
},
]);
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>
);
For more information see nested routes in the FAQ.