30
loading...
This website collects cookies to deliver better user experience
This was originally posted on Saeloun's blog.
/blog
/categories
/contact
highlighted
entries denote the current URL./blog
/blog
, /categories
/blog
, /categories
/blog
, /contact
<a
href="/blog"
onClick={event => {
// stop the browser from changing the URL
event.preventDefault();
// push an entry into the browser history stack and change the URL
window.history.pushState({}, undefined, "/blog");
}}
/>
/blog
.<Link>
and <NavLink>
, which renders an <a>
element. We can initiate navigation by clicking on it.useNavigate
and <Navigate>
which enables us to navigate programmatically.<Link>
and <NavLink>
and their usage:import { Link } from "react-router-dom";
function Navbar() {
return (
<nav>
<Link to="blog">Blog</Link>
<Link to="categories">Categories</Link>
<Link to="contact">Contact</Link>
</nav>
)
}
<NavLink>
in the above example instead of <Link>
.<NavLink>
knows whether or not it is "active". So if we want to apply some styles to the active link, we need to use <NavLink>
./dashboard
after they successfully log in. This is exactly the place where we would want to navigate programmatically.useNavigate
and <Navigate>
to do exactly that.import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
function LoginForm() {
const [user, setUser] = useState(null);
const [error, setError] = userState(null);
const navigate = useNavigate();
const handleSubmit = event => {
event.preventDefault();
try {
const user = await login(event.target);
setUser(user);
navigate("/dashboard", { replace: true });
} catch (error) {
setError(error);
}
}
return (
<div>
{error && <p>{error.message}</p>}
<form onSubmit={handleSubmit}>
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit">Login</button>
</form>
</div>
);
}
<Navigate>
like this:import React, { useState } from "react";
import { Navigate } from "react-router-dom";
function LoginForm() {
const [user, setUser] = useState(null);
const [error, setError] = userState(null);
const handleSubmit = event => {
event.preventDefault();
try {
const user = await login(event.target);
setUser(user);
} catch (error) {
setError(error);
}
}
return (
<div>
{error && <p>{error.message}</p>}
{user && (
<Navigate to="/dashboard" replace={true} />
)}
<form onSubmit={handleSubmit}>
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit">Login</button>
</form>
</div>
);
}
P.S. This is my first ever blog here. Your feedback is highly appreciated 🙏 😄