请问为什么当我尝试搜索结果时所有内容都被过滤掉了
我检查了API和数据库,没有任何问题,所以这肯定是前端问题
//initialize event page, lists out all the events
const initEventData = async () => {
try {
const response = await fetch("http://localhost:3000/all-events", {
method: "GET",
});
const data = await response.json();
setEvents(data);
setFilteredEvents(data);
setFetched(true);
// Calculate min and max prices from the events data
let prices = [];
data.map((event) => {
let numericArray = event.price.split(",").map(Number);
prices = prices.concat(numericArray);
});
console.log("prices: ", prices);
const minPrice = Math.min(...prices);
const maxPrice = Math.max(...prices);
setTolPriceRange([minPrice, maxPrice]);
setPriceRange([minPrice, maxPrice]);
} catch (error) {
console.error("Error fetching event data:", error);
}
};
//switch to event mode (there is a venue mode)
useEffect(() => {
if (!fetched && isEvent) {
initEventData();
}
}, [fetched,isEvent]);
//after filtering event page, show the filtered results, filtering is done in the backend
const fetchEventData = async () => {
try {
const response = await fetch(
"http://localhost:3000/navbar-events",
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
name: searchQuery,
priceRange: priceRange,
earliestDate: dateRange.startDate,
latestDate: dateRange.endDate,
}),
}
);
const data = await response.json();
setEvents(data);
setFilteredEvents(data);
} catch (error) {
console.error("Error fetching event data:", error);
}
};
//sorting events
useEffect(() => {
if (fetched && isEvent) {
const sortedEvents = [...filteredEvents].sort((a, b) => {
let aValue, bValue;
switch (category) {
case 'earliestDate':
aValue = new Date(a.earliestDate);
bValue = new Date(b.earliestDate);
break;
case 'latestDate':
aValue = new Date(a.latestDate);
bValue = new Date(b.latestDate);
break;
case 'price':
aValue = parseInt(Math.max(...a.price).eventnum, 10);
bValue = parseInt(Math.max(...b.price).eventnum, 10);
break;
case 'name':
default:
aValue = a.name.replace(/^\W+/, '');
bValue = b.name.replace(/^\W+/, '');
break;
}
if (ascending) {
if (Number(aValue) && Number(bValue)) {
return Number(aValue) - Number(bValue);
} else {
return a.name.localeCompare(b.name);
}
} else {
if (Number(aValue) && Number(bValue)) {
return Number(bValue) - Number(aValue);
} else {
return b.name.localeCompare(a.name);
}
}
});
setFilteredEvents(sortedEvents);
}
}, [category, ascending,fetched,isEvent]);
我不确定,正如我所说,有一个场地页面,但那里的排序效果很好。
(详细详细更多详细moooooooore详细)
检查后端过滤:
检查获取请求:
正确处理错误:
catch
块中添加更详细的错误处理(特别是在 fetchEventData
中)。记录或显示错误消息以获取有关可能出现问题的更多信息。检查前端状态:
searchQuery
、priceRange
、dateRange
等)。确保这些值设置正确并代表所需的过滤器。用于调试的控制台日志:
console.log
语句,尤其是在异步函数中,以记录状态、从服务器接收的数据以及任何中间值。这可以帮助您确定问题可能发生在哪里。检查排序逻辑:
useEffect
块中的排序逻辑(earliestDate
、latestDate
、price
、name
)。确保排序标准和比较正确。验证后端和数据库:
检查CORS(跨源资源共享):
通过彻底调查这些方面,您应该能够识别并解决导致活动页面出现过滤问题的问题。