hel*_*llo 20 router reactjs react-router next.js react-hooks
为什么当我使用 URL 中的正确 id 刷新页面时,router.query 为空,但当我通过 导航到该页面时,它却有效?
说我有/pages/[user]/index.js
<Link
href="/[user]/media/[mediaId]"
as={`/${username}/media/${post.id}`}
>
Run Code Online (Sandbox Code Playgroud)
这个链接带我去localhost:3000/testuser/media/some-id
然后在/pages/[user]/media/[mediaId].js中
const MediaPage = () => {
const [post, setPost] = useState([]);
const router = useRouter();
const { mediaId } = router.query;
useEffect(() => {
router.prefetch("/");
}, []);
useEffect(() => {
if (!mediaId) return null;
getPostImage();
async function getPostImage() {
try {
const { data } = await API.graphql({
query: postById,
variables: {
id: mediaId,
},
});
setPost(data.postById.items[0]);
} catch (err) {
console.log("error getPostImage", err);
}
}
}, [mediaId]);
if (user === null) return null;
return (
<div>
<Modal
className={`${styles.postModal}`}
isOpen={true}
onRequestClose={() => router.push(`/${user.username}`)}
contentLabel="Post modal"
>
{* // content ... *}
</Modal>
</div>
);
};
export default MediaPage;
Run Code Online (Sandbox Code Playgroud)
当我在媒体页面 或 上localhost:3000/testuser/media/some-id并按刷新时,mediaId来自 router.query 为空。
fly*_*tle 31
正如 @Ishan Bassi 所提到的,使用isReady中的字段next/router将指示query水合后何时完全更新。因此,尝试这样的事情:
const MediaPage = () => {
const router = useRouter();
useEffect(() => {
if(router.isReady){
const { media } = router.query;
if (!mediaId) return null;
getPostImage();
...
}
}, [router.isReady]);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12645 次 |
| 最近记录: |