在做一个项目时,我注意到一个奇怪的行为useLocation
我找不到解释的钩子。
我有一个按钮,单击它会将您重定向到EditOrder
页面并将传递一个状态:
const navigate = useNavigate();
const handleClick = (data) => {
navigate("edit-order", {state: {order: data}})
};
In the EditOrder
我检查的页面UseEffect
钩子如果state
已提供,如果未提供,用户将被重定向到不同的页面:
const { state } = useLocation();
const navigate = useNavigate();
useEffect(() => {
if (!state) {
navigate("some-page");
}
}, []);
奇怪的是,当我刷新页面时,我仍然可以访问它,如果我console.log(state.order)
即使我重新加载,数据仍然存在ctrl + shift + r
状态保持不变,这也会发生在empty cache and hard reload option
(在 Chrome 和 Edge 中都尝试过)。
但是当我复制 URL 并将其粘贴到新选项卡中时,我立即被重定向到“某个页面”
和console.log(state)
将会呈现null
.
我检查了 cookie 和本地存储,但找不到状态数据。
有人可以解释为什么会发生这种情况以及状态数据是如何保存的吗?
Edit:
这里有一个Youtube 视频 https://www.youtube.com/watch?v=oBGyefJpIhY这表明了这种行为。
视频中的代码可以在这个沙箱 https://codesandbox.io/s/location-state-stay-on-hard-refresh-q6bjxn?file=/src/App.js,当您在沙盒上运行代码时,它会按预期运行,刷新时所有状态都会重置,但是在本地运行时会出现此问题(在两台不同的计算机上)。
关于 location.state 的 git 存储库 https://github.com/remix-run/history/blob/main/docs/api-reference.md#locationstate