History api https://developer.mozilla.org/en-US/docs/Web/API/History_API/Working_with_the_History_API
https://www.theodinproject.com/lessons/node-path-react-new-react-router
import React from "react";
import ReactDOM from "react-dom/client";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import App from "./App";
import Profile from "./Profile";
import DefaultProfile from "./DefaultProfile";
import Spinach from "./Spinach";
import Popeye from "./Popeye";
const router = createBrowserRouter([
{
path: "/",
element: <App />,
},
{
path: "profile",
element: <Profile />,
children: [
{ index: true, element: <DefaultProfile /> },
{ path: "spinach", element: <Spinach /> },
{ path: "popeye", element: <Popeye /> },
],
},
]);
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>
);import { useParams } from "react-router-dom";
import DefaultProfile from "./DefaultProfile";
import Spinach from "./Spinach";
import Popeye from "./Popeye";
const Profile = () => {
const { name } = useParams();
return (
<div>
<h1>Hello from profile page!</h1>
<p>So, how are you?</p>
<hr />
<h2>The profile visited is here:</h2>
{name === "popeye" ? (
<Popeye />
) : name === "spinach" ? (
<Spinach />
) : (
<DefaultProfile />
)}
</div>
);
};
export default Profile;import { createBrowserRouter, RouterProvider } from "react-router-dom";
import App from "./App";
import Profile from "./Profile";
import ErrorPage from "./ErrorPage";
const Router = () => {
const router = createBrowserRouter([
{
path: "/",
element: <App />,
errorElement: <ErrorPage />,
},
{
path: "profile/:name",
element: <Profile />,
},
]);
return <RouterProvider router={router} />;
};
export default Router;import { useNavigate } from "react-router-dom";
function useLogoutTimer() {
const userIsInactive = useFakeInactiveUser();
const navigate = useNavigate();
useEffect(() => {
if (userIsInactive) {
fake.logout();
navigate("/session-timed-out");
}
}, [userIsInactive]);
}
import * as React from "react";
import { Navigate } from "react-router-dom";
class LoginForm extends React.Component {
state = { user: null, error: null };
async handleSubmit(event) {
event.preventDefault();
try {
let user = await login(event.target);
this.setState({ user });
} catch (error) {
this.setState({ error });
}
}
render() {
let { user, error } = this.state;
return (
<div>
{error && <p>{error.message}</p>}
{user && (
<Navigate to="/dashboard" replace={true} />
)}
<form
onSubmit={(event) => this.handleSubmit(event)}
>
<input type="text" name="username" />
<input type="password" name="password" />
</form>
</div>
);
}
}
{
path: "/",
element: <App />,
errorElement: <ErrorPage />,
children:[
{
path:"/profile/:name",
element:<profile />
}
]
},
<Outlet /> in <App />import { createBrowserRouter, RouterProvider } from "react-router-dom";
import App from "./App";
import Profile from "./Profile";
import ErrorPage from "./ErrorPage";
const Router = () => {
const router = createBrowserRouter([
{
path: "/",
element: <App />,
errorElement: <ErrorPage />,
},
{
path: "profile/:name",
element: <Profile />,
},
]);
return <RouterProvider router={router} />;
};
export default Router;import { Link } from "react-router-dom";
const ErrorPage = () => {
return (
<div>
<h1>Oh no, this route doesn't exist!</h1>
<Link to="/">
You can go back to the home page by clicking here, though!
</Link>
</div>
);
};
export default ErrorPage;