我有页面,我通过getServerSideProps()获取数据。但我也有用户可以搜索数据的组件。搜索数据被发送回主页并使用。问题是我得到了不定式循环。控制台中的数据。log()仍在获取。
我如何才能只获取一次数据?你能告诉我我做错了什么吗?tnx
export async function getServerSideProps() {
await connectDB();
try {
const animals = await NewEvent.find({})
return {
props: {
animals: JSON.parse(JSON.stringify(animals)),
}
}
} catch (error) {
return {
props: {
notFound: true
},
};
}
}
const Index = ({ animals }) => {
console.log(animals) // I am getting data permanently.
// function to get search data from search component
const getSearchedData = (data) => {
console.log(data) // I am getting data permanently.
setSearchData(data)
}
return (
<>
{/* Component for searching data */}
<SearchAnimals getSearchedData={getSearchedData} />
字符串
SearchAnimals组件在这里与useCalback
const Index = ({ getSearchedData }) => {
const [query, setQuery] = useState('');
const getData = useCallback(async () => {
try {
const config = {
headers: {
"Content-Type": "application/json",
},
};
// call backend and getting data
const res = await axios.post(`/api/searchAnimals`, { query: query }, config);
if (getSearchedData) {
getSearchedData(res.data.data);
}
} catch (error) {
console.error('Error fetching data:', error);
}
}, [query, getSearchedData]);
useEffect(() => {
getData()
}, [query, getData])
型
2条答案
按热度按时间des4xlb01#
在当前设置中,getServerSideProps在页面加载到服务器端时获取数据,然后您的组件也具有在客户端获取数据的逻辑。这可能导致冗余的数据获取。
要解决此问题,您可以修改组件以在触发其他请求之前检查数据是否已被提取。您可以使用状态变量来跟踪是否发生了初始服务器端数据提取。下面是一个示例:
import { useState,useEffect } from 'react'; import axios from 'axios';
字符串
vd2z7a6w2#