面试题答案
一键面试- 获取
id
参数的值:- 在 Next.js 中,可以通过
getServerSideProps
或useRouter
钩子来获取id
参数的值。 - 使用
getServerSideProps
:import React from'react'; import { GetServerSideProps } from 'next'; const Post = ({ post }) => { return ( <div> <h1>{post.title}</h1> <p>{post.content}</p> </div> ); }; export const getServerSideProps: GetServerSideProps = async (context) => { const { id } = context.query; // 这里的 id 是数组形式,通常取第一个值 const postId = Array.isArray(id)? id[0] : id; // 从后端获取特定文章数据 const res = await fetch(`https://api.example.com/posts/${postId}`); const post = await res.json(); return { props: { post } }; }; export default Post;
- 使用
useRouter
钩子(客户端渲染场景):import React from'react'; import { useRouter } from 'next/router'; const Post = () => { const router = useRouter(); const { id } = router.query; const postId = Array.isArray(id)? id[0] : id; return ( <div> <p>文章 ID: {postId}</p> </div> ); }; export default Post;
- 在 Next.js 中,可以通过
- 利用该参数从后端获取特定文章的数据:
- 在
getServerSideProps
中: 如上述第一个代码示例,在getServerSideProps
中,获取id
参数后,使用fetch
等方式向后端 API 发送请求。假设后端 API 地址为https://api.example.com/posts/${postId}
,将获取到的文章数据通过props
传递给页面组件。 - 在客户端(使用
useRouter
):import React, { useEffect, useState } from'react'; import { useRouter } from 'next/router'; const Post = () => { const router = useRouter(); const { id } = router.query; const postId = Array.isArray(id)? id[0] : id; const [post, setPost] = useState(null); useEffect(() => { const fetchPost = async () => { const res = await fetch(`https://api.example.com/posts/${postId}`); const data = await res.json(); setPost(data); }; if (postId) { fetchPost(); } }, [postId]); return ( <div> {post && ( <> <h1>{post.title}</h1> <p>{post.content}</p> </> )} </div> ); }; export default Post;
useEffect
钩子,当postId
变化时,向后端 API 发送请求获取特定文章的数据,并更新组件状态显示文章内容。 - 在