📅  最后修改于: 2023-12-03 15:38:21.700000             🧑  作者: Mango
推荐是电商、新闻等网站常用的功能,可为用户提供更多的相关内容或产品,提升用户体验和转化率。在 Next.js 中实现推荐,我们可以采用以下两种方式。
第一种方式是采用传统的后端渲染方法,通过服务端获取数据并渲染到页面中。具体实现方法如下:
示例代码:
// /pages/detail/[id].jsx
import { useRouter } from 'next/router';
import getRecommendations from '../../lib/getRecommendations';
function Detail({ data, recommendations }) {
return (
<div>
<h1>{data.title}</h1>
<p>{data.content}</p>
<h2>推荐</h2>
<ul>
{recommendations.map((item) => (
<li key={item.id}>{item.title}</li>
))}
</ul>
</div>
);
}
export async function getServerSideProps({ params }) {
const { id } = params;
const data = await getDataFromDB(id);
const recommendations = await getRecommendations(data.keywords);
return {
props: {
data,
recommendations,
},
};
}
第二种方式是采用客户端渲染,通过 API 获取数据并在页面中呈现。具体实现方法如下:
示例代码:
// /pages/detail/[id].jsx
import { useState, useEffect } from 'react';
import { useRouter } from 'next/router';
import getRecommendations from '../../lib/getRecommendations';
function Detail({ data }) {
const router = useRouter();
const [recommendations, setRecommendations] = useState([]);
useEffect(() => {
async function fetchRecommendations() {
const { keywords } = data;
const res = await fetch(`/api/recommendations?keywords=${keywords}`);
const data = await res.json();
setRecommendations(data);
}
fetchRecommendations();
}, [data]);
return (
<div>
<h1>{data.title}</h1>
<p>{data.content}</p>
<h2>推荐</h2>
<ul>
{recommendations.map((item) => (
<li key={item.id}>{item.title}</li>
))}
</ul>
</div>
);
}
export async function getServerSideProps({ params }) {
const { id } = params;
const data = await getDataFromDB(id);
return {
props: { data },
};
}
// /pages/api/recommendations.js
export default async function handler(req, res) {
const { keywords } = req.query;
const recommendations = await getRecommendations(keywords);
res.json(recommendations);
}
这里我们使用了 Next.js 提供的 getServerSideProps
方法和 API 路由来实现客户端渲染。在页面服务端渲染时,我们通过 getServerSideProps
方法获取数据并传递到页面当中。在客户端渲染时,我们通过 API 路由来获取推荐内容。
以上就是在 Next.js 中添加推荐的实现方式。在实际应用中,我们还需要根据业务需求和数据特点进行优化和改进。