To pass state to another component with react-router-dom v6 useNavigate hook, we can call navigate with an object as the 2nd argument.
For instance, we write
import { Link, useNavigate } from "react-router-dom";
const ComponentA = (props) => {
const navigate = useNavigate();
const toComponentB = () => {
navigate("/componentB", { state: { id: 1, name: "sabaoon" } });
};
return (
<>
<div>
<a onClick={() => toComponentB()}>Component B</a>
</div>
</>
);
};
export default ComponentA;
to call navigate with the "/componentB" URL path and an object that we want to pass to the component that renders when we go to /componentB.
Then in ComponentB, which is rendered when we go to /componentB, we get the values from the useLocation hook by writing
import { useLocation } from "react-router-dom";
const ComponentB = () => {
const location = useLocation();
return (
<>
<div>{location.state.name}</div>
</>
);
};
export default ComponentB;
We call the useLocation hook to return the object that we passed in as the 2nd argument of navigate in ComponentA.
And then we get the properties from the location object.