面试题答案
一键面试- 获取路由参数:
- 在 Next.js 中,对于嵌套路由,可以通过
useRouter
钩子函数来获取路由参数。首先,需要从next/router
导入useRouter
。
import { useRouter } from 'next/router'; const ProfilePage = () => { const router = useRouter(); const { userId, section } = router.query; return ( <div> <p>User ID: {userId}</p> <p>Section: {section}</p> </div> ); }; export default ProfilePage;
- 在 Next.js 中,对于嵌套路由,可以通过
- 基于参数从 API 获取数据:
- 假设我们有一个 API 端点,例如
https://example.com/api/users/[userId]/profile/[section]
,可以使用fetch
或者其他 HTTP 请求库(如axios
)来获取数据。以fetch
为例:
import { useRouter } from 'next/router'; import { useEffect, useState } from'react'; const ProfilePage = () => { const router = useRouter(); const { userId, section } = router.query; const [profileData, setProfileData] = useState(null); useEffect(() => { const fetchData = async () => { if (userId && section) { const response = await fetch(`https://example.com/api/users/${userId}/profile/${section}`); const data = await response.json(); setProfileData(data); } }; fetchData(); }, [userId, section]); return ( <div> {profileData && ( <div> <p>{JSON.stringify(profileData)}</p> </div> )} </div> ); }; export default ProfilePage;
- 假设我们有一个 API 端点,例如
这里通过 useEffect
钩子,在 userId
或 section
变化时,发起 API 请求获取相应的数据,并更新组件状态来展示数据。如果使用 axios
,代码结构类似,只是请求方式变为 axios.get
等。例如:
import { useRouter } from 'next/router';
import { useEffect, useState } from'react';
import axios from 'axios';
const ProfilePage = () => {
const router = useRouter();
const { userId, section } = router.query;
const [profileData, setProfileData] = useState(null);
useEffect(() => {
const fetchData = async () => {
if (userId && section) {
const response = await axios.get(`https://example.com/api/users/${userId}/profile/${section}`);
setProfileData(response.data);
}
};
fetchData();
}, [userId, section]);
return (
<div>
{profileData && (
<div>
<p>{JSON.stringify(profileData)}</p>
</div>
)}
</div>
);
};
export default ProfilePage;