我已经创建了一个后上市的应用程序,并在每个职位点击用户将被重定向到单一的详细信息页面的职位
index.js(文章列表)
export default function Home(props) {
const [postData, setPostData] = useState([]);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/posts", { next: { revalidate: 10 } })
.then((res) => res.json())
.then((data) => {
setPostData(data);
});
}, []);
const cardArr = postData.map((post) => <Card data={post} key={post.id} />);
return (
<Layout>
<Header>
<div>Posts</div>
</Header>
{cardArr}
</Layout>
);
}
字符串
[id].js(单篇文章详情页)
export const PostPage = (props) => {
const router = useRouter();
const [post, setPost] = useState({});
useEffect(() => {
fetch(`https://jsonplaceholder.typicode.com/posts/${router.query.id}`, {
next: { revalidate: 1000 },
})
.then((res) => res.json())
.then((data) => {
setPost(data);
});
}, []);
return (
<Layout>
<Header>
<div className={styles.header}>{post.title}</div>
</Header>
<div>{post.body}</div>
</Layout>
);
};
export default PostPage;
型
我正在尝试实现路由缓存。这样,如果我去一个职位,然后向服务器发出请求,数据将被缓存。下一次,如果我去同一个路由在一段时间内,然后而不是从服务器获取数据,它应该显示数据从该高速缓存。
我遵循了下一个js文档,
{ next: { revalidate: 10 } }
型
但它不工作,请指导我,如果我错过了什么。
1条答案
按热度按时间kqhtkvqz1#
看看你的代码,你似乎混合了app-dir和pages-dir逻辑。实际上,你不是在“服务器”上获取任何东西,而是在客户端上,从你的组件中
useEffect
和useState
的使用情况来判断。作为服务器组件,你应该这样定义它:字符串
此外,我注意到你似乎正在使用来自
next/router
的路由器,它只在pages
目录中工作。当使用应用程序目录时,你将从next/navigation
导入它,并从传递到每个页面的searchParams
prop 中检索查询。我强烈建议你看看新的应用程序路由器的official documentation,因为你似乎根本不了解基本原理。