React Router Dom,使用 useNavigate 将数据传递给组件
React Router Dom, pass data to a component with useNavigate
我正在使用 useNavigate
转到组件,并且需要在单击按钮时将数据(状态)传递给此 ChatRoom
组件。该组件位于路线 /chatroom
上。
我正在使用 React Router Dom v6
。我已阅读文档,但找不到我要查找的内容。
export default function Home() {
const [username, setUsername] = useState("");
const [room, setRoom] = useState("");
const navigate = useNavigate();
const handleClick = () => {
navigate("/chatroom");
};
return (<button
type="submit"
className="btn"
onClick={() => {
handleClick();
}}
>
Join Chat
</button>
)}
1。解决方案
您可以像这样将数据传递给对应于 /chatroom
的组件:
navigate('/chatroom', { state: "Hello World!" });
并在 useLocation
的帮助下以这种方式消费 :
import {useLocation} from "react-router-dom";
function ChatRoom() {
const { state } = useLocation();
return (
<div>
{state}
</div>
);
}
export default Chatroom;
如果你想传递多个状态,使用一个对象,像这样:
navigate('/chatroom', { state: {id:1, text: "Hello World!"} });
2。疑难解答
正如您可以在此 CodeSandbox 上尝试的那样,它仅在调用传递的数据时有效 state
。
我正在使用 useNavigate
转到组件,并且需要在单击按钮时将数据(状态)传递给此 ChatRoom
组件。该组件位于路线 /chatroom
上。
我正在使用 React Router Dom v6
。我已阅读文档,但找不到我要查找的内容。
export default function Home() {
const [username, setUsername] = useState("");
const [room, setRoom] = useState("");
const navigate = useNavigate();
const handleClick = () => {
navigate("/chatroom");
};
return (<button
type="submit"
className="btn"
onClick={() => {
handleClick();
}}
>
Join Chat
</button>
)}
1。解决方案
您可以像这样将数据传递给对应于 /chatroom
的组件:
navigate('/chatroom', { state: "Hello World!" });
并在 useLocation
的帮助下以这种方式消费 :
import {useLocation} from "react-router-dom";
function ChatRoom() {
const { state } = useLocation();
return (
<div>
{state}
</div>
);
}
export default Chatroom;
如果你想传递多个状态,使用一个对象,像这样:
navigate('/chatroom', { state: {id:1, text: "Hello World!"} });
2。疑难解答
正如您可以在此 CodeSandbox 上尝试的那样,它仅在调用传递的数据时有效 state
。