我已经创建了一个路由处理器,使用新的app router
来执行GET(get all),并将数据检索到我可以在控制台中看到的客户端。我现在如何在NextJS v13.4中显示这些数据?
下面是我如何创建调用数据库的路由处理程序:
// /app/api/tacos/routes.js
import { NextRequest, NextResponse } from ‘next/server’;
import { supabaseClient } from ‘../../supabaseClient’;
export async function GET () {
try {
const { data, error } = supabaseClient.from(‘my_table’).select(*);
if (error) {
return NextResponse.json({error: ‘Error in getting the tacos from Supabase.’}, {status: 500})
}
return NextResponse.json({data}, {status: 200});
}
catch (error) {
return NextResponse.json({message: ‘Error in getting the tacos from the API.’}, {status: 500});
}
}
字符串
下面是我如何调用路由处理程序:
const getAllTacos = async () => {
const response = await fetch(‘/api/tacos’, {
method: ‘GET’
});
if(response.ok) {
const { data } = await response.json();
console.log(data);
return data;
} else {
throw New Error (‘Error on getAllTacos’);
}
}
型
作为测试的一部分,我创建了一个按钮,用于检索在控制台中可以看到的数据。
return (
<div className=“button bg-yellow-500” onClick={getAllTacos}>Get All Tacos</div>
)
型
但是我现在如何调用这个路由处理程序,以便用户在页面加载时看到它呢?
2条答案
按热度按时间aamkag611#
现在你只需要自动调用这个函数,这样用户就可以在页面加载之前看到它。
最简单的方法?
useEffect
调用你已经定义的路由处理程序。在useEffect的dependency数组中放置一个空数组,这样它只会在第一次加载时触发,就像
useEffect(()=> {…}, []);
一样。所以它看起来像这样:
字符串
快速说明:之所以会有这个中间的fetchAndSetTacosArray,是因为你需要一个await关键字。await需要一个fetchAndSetTacosArray函数,而useEffect不能是fetchAndSetTacosArray,所以你必须把fetchAndSetTacosArray函数放在其中。
第二步:在页面上创建一个状态变量,它将在本地保存从数据库
const [tacoData, setTacoData] = useState([]);
返回的数据第三步:Map出数组的项以显示项
型
别担心......玉米卷。卡路里永远不会包括在这个应用程序=)只是确保你仍然注意。
所以合起来看起来像这样:
型
yebdmbv42#
如果你想使用Vercel的swr来处理数据检索,你可以这样做。
字符串
注意,如果你没有指定方法,默认值是GET。例如,如果你需要指定POST,你只需将上面的
fetcher
替换为{fetcher, method: POST}