这是我的 Sort.js 样式组件:
<SortWrapper>
<SortText>Sort By</SortText>
<SortSelect onChange={onSelectChange}>
<SortOption value="vehicleMake">Vehicle make</SortOption>
<SortOption value="vehicleModel">Vehicle model</SortOption>
</SortSelect>
</SortWrapper>
这是 App.js 中的函数,其中渲染排序组件
<Sort onSelectChange={onSelectChange} />
这是一个函数:
const onSelectChange = (e) => {
const value = e.target.value;
if (value === "VehicleMake")
vehicles.sort((a, b) => a.vehicleMake.localeCompare(b.vehicleMake));
else if (value === "VehicleModel") {
vehicles.sort((a, b) => a.vehicleModel.localeCompare(b.vehicleModel));
} else {
vehicles.sort((a, b) => a.id - b.id);
}
“车辆”是我从 Firestore 数据库获取的对象数组。
每当我更改 SortOption 的值时,它都不会自动对对象数组进行排序,但当我单击分页中的第 2 页,然后单击第 1 页时,它会对其进行排序。
这是我的网格组件:
<Grid>
{vehiclesData.map((vehicle) => (
<VehicleCard
id={vehicle.id}
key={vehicle.id}
ImageURL={vehicle.ImageURL}
vehicleMake={vehicle.vehicleMake}
vehicleModel={vehicle.vehicleModel}
selectVehicle={() => setSelectedVehicle(vehicle)}
deleteHandler={() => deleteHandler(vehicle.id)}
/>
))}
</Grid>
这是我的过滤功能:
const vehiclesData = useMemo(() => {
let computedVehicles = vehicles;
if (searchVehicle) {
computedVehicles = computedVehicles.filter((vehicle) =>
vehicle.vehicleMake.toLowerCase().includes(searchVehicle.toLowerCase())
);
}
setTotalVehicles(computedVehicles.length);
return computedVehicles.slice(
(currentPage - 1) * vehiclesPerPage,
(currentPage - 1) * vehiclesPerPage + vehiclesPerPage
);
正如我之前所写,我希望我的车辆按品牌或型号自动渲染,而不是在我单击分页中的页码时渲染。
Your Answer
1 个回答
你的排序方法应该是这样的
const onSelectChange = (e) => {
let temVehicles = [...vehicles]
const value = e.target.value;
if (value === "VehicleMake")
temVehicles .sort((a, b) => a.vehicleMake.localeCompare(b.vehicleMake));
else if (value === "VehicleModel") {
temVehicles .sort((a, b) => a.vehicleModel.localeCompare(b.vehicleModel));
} else {
temVehicles .sort((a, b) => a.id - b.id);
}
setVehicles(temVehicles )}
你的过滤函数应该是这样的
const vehiclesData = useMemo(() => {
let computedVehicles = vehicles;
if (searchVehicle) {
computedVehicles = computedVehicles.filter((vehicle) =>
vehicle.vehicleMake.toLowerCase().includes(searchVehicle.toLowerCase())
);
}
setTotalVehicles(computedVehicles.length);
return computedVehicles.slice(
(currentPage - 1) * vehiclesPerPage,
(currentPage - 1) * vehiclesPerPage + vehiclesPerPage
);},[vehicles])
基本上,一旦 onSelectChange 运行,您就会更新车辆状态,然后 usememo 应该再次运行,因此我们向其中添加依赖车辆
Hot Questions
function_exists()无法判定自定义函数
2024-04-29 11:01:01
google 浏览器 手机版显示的怎么实现
2024-04-23 00:22:19
子窗口操作父窗口,输出没反应
2024-04-19 15:37:47
父窗口没有输出
2024-04-18 23:52:34
关于CSS思维导图的课件在哪?
2024-04-16 10:10:18
Hot Tools
vc9-vc14(32+64位)运行库合集(链接在下方)
phpStudy安装所需运行库集合下载
VC9 32位
VC9 32位 phpstudy集成安装环境运行库
php程序员工具箱完整版
程序员工具箱 v1.0 php集成环境
VC11 32位
VC11 32位 phpstudy集成安装环境运行库
SublimeText3汉化版
中文版,非常好用
热门话题
抖音等级价目表1-75
20337
7
20337
7
wifi显示无ip分配
13531
4
13531
4
虚拟手机号接收验证码
11852
4
11852
4
gmail邮箱登陆入口在哪里
8836
17
8836
17
windows安全中心怎么关闭
8420
7
8420
7
热门文章
2025年加密货币市场十大趋势预测:下一个风口在哪里?
2025-11-07
By DDD
币圈土狗项目如何识别?避免归零币的陷阱与风险预警
2025-11-07
By DDD
解决CSS @media 查询优先级与规则覆盖问题的教程
2025-11-07
By DDD
win10字体安装后在软件里找不到怎么办_win10字体安装与识别方法
2025-11-07
By DDD
铁路12306支付失败订单还在吗_铁路12306支付失败订单处理方法
2025-11-07
By DDD





