Vehiclemake This is my Sort.js style component: This is the function in App.js where the sorting component is rendered This is a function: "Vehicles" is an array of objects that I get from the Firestore database. Whenever I change the value of the SortOption, it does not automatically sort the array of objects, but when I click on page 2 in the pagination, and then click on page 1, it sorts it. This is my grid component: This is my filter function: As I wrote before, I want my vehicles to render automatically by make or model, not when I click on the page number in the pagination. P粉7908197272024-04-07 15:43:05 Your sorting method should be like this Your filter function should be like this Basically, once onSelectChange runs, you update the vehicle status and then usememo should run again, so we add the dependent vehicle to itHow to trigger render (with filter and pagination) on sort method in React?
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); }
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 );
reply all(1)I'll reply
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])