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