0

I'm learning react and have 1 problem:

My list items page:

import React from "react";
import carsData from "../../data/CarsData";
import ReactDOM from 'react-dom';
import ReactPaginate from 'react-paginate';
import {
  CarItem,
  CarImage,
  CarBody,
  CarName,
  CarAttributesContainer,
  CarAttributesIcon,
  CarPrice,
  CarButtonLink,
} from "./CarSectionItemElements";
import MileageImg from "../../../img/mileage.png";
import EngineImg from "../../../img/engine.png";
import FuelImg from "../../../img/fuelType.png";
import TransImg from "../../../img/transmission.png";
import DriveImg from "../../../img/driveTrain.png";
import BootImg from "../../../img/bootType.png";

const CarSectionItem = () => {
  /*this is the list of items mapped from local data file i have. i want to make pagination for this list. */
  const products = carsData.map((product) => {
    return (
      <CarItem key={product.id}>
        <CarImage to={`/catalog/${product.id}`} target="_blank" >
          <img src={product.image[0]} />
        </CarImage>
        <CarBody>
          <CarName>
            <p>{product.title}</p>
          </CarName>
          <CarAttributesContainer>
            <CarAttributesIcon>
              <img src={MileageImg} />
              <span>{product.mileage}</span>
            </CarAttributesIcon>
            <CarAttributesIcon>
              <img src={EngineImg} />
              <span>{product.engine}</span>
            </CarAttributesIcon>
            <CarAttributesIcon>
              <img src={FuelImg} />
              <span>{product.fuelType}</span>
            </CarAttributesIcon>
            <CarAttributesIcon>
              <img src={TransImg} />
              <span>{product.transmission}</span>
            </CarAttributesIcon>
            <CarAttributesIcon>
              <img src={DriveImg} />
              <span>{product.driveTrain}</span>
            </CarAttributesIcon>
            <CarAttributesIcon>
              <img src={BootImg} />
              <span>{product.bootType}</span>
            </CarAttributesIcon>
          </CarAttributesContainer>
          <CarPrice>
            <p>{product.price}</p>
          </CarPrice>
        </CarBody>
        <CarButtonLink to={`/catalog/${product.id}`} target="_blank">
          {product.buttonLabel}
        </CarButtonLink>
      </CarItem>
    );
  });

  /* react paginate library */
  function PaginatedItems({ itemsPerPage }) {
    const [currentItems, setCurrentItems] = useState(null);
    const [pageCount, setPageCount] = useState(0);
    const [itemOffset, setItemOffset] = useState(0);
    const itemsPerPage = 6;
  
    useEffect(() => {
      const endOffset = itemOffset + itemsPerPage;
      setPageCount(Math.ceil(items.length / itemsPerPage));
    }, [itemOffset, itemsPerPage]);
  
    const handlePageClick = (event) => {
      const newOffset = event.selected * itemsPerPage % items.length;
      setItemOffset(newOffset);
    };
  
    return (
      <>
        <Items currentItems={currentItems} />
        <ReactPaginate
          nextLabel=">"
          onPageChange={handlePageClick}
          pageRangeDisplayed={3}
          marginPagesDisplayed={2}
          pageCount={pageCount}
          previousLabel="<"
          pageClassName="page-item"
          pageLinkClassName="page-link"
          previousClassName="page-item"
          previousLinkClassName="page-link"
          nextClassName="page-item"
          nextLinkClassName="page-link"
          breakLabel="..."
          breakClassName="page-item"
          breakLinkClassName="page-link"
          containerClassName="pagination"
          activeClassName="active"
          renderOnZeroPageCount={null}
        />
      </>
    );
  }


  return <>{products}</>;
};
export default CarSectionItem;

CarsSection where all the components including CarsSectionItem is stored:

import React, { useState } from "react";
import { CarsSectionContainer, CarsContainer } from "./CarsSectionElements";
import CarsFilter from "./CarsFilter/CarsFilter";
import CarSectionItem from "./СarSectionItem/CarSectionItem";
import { carsData } from "../data/CarsData";

const CarsSection = () => {


  return (
    <CarsSectionContainer>
      <CarsFilter/>
      <CarsContainer>
        <CarSectionItem />
      </CarsContainer>
    </CarsSectionContainer>
  );
};

export default CarsSection;

My local data file :

import Car1 from '../../img/car1.jpg'
import Car2 from '../../img/car2.jpg'
const carsData = [
  {
    id: '1',
    image: [Car1, Car1, Car1, Car1],
    price: '$80 000',
    brand: 'Genesis',
    title: "Genesis G90 3.8 AWD PRESTIGE 2020",
    mileage: "9300 км",
    engine: "3.3 л",
    fuelType: "Бензин",
    transmission: "Автомат",
    driveTrain: "Полный 4WD",
    bootType: "Седан",
    buttonLabel: 'Детали'
  },
  {
    id: '2',
    image: [Car2, Car2, Car2, Car2],
    price: '$80 000',
    brand: 'Genesis',
    title: "Genesis G90 3.8 AWD PRESTIGE 2020",
    mileage: "9300 км",
    engine: "3.3 л",
    fuelType: "Бензин",
    transmission: "Автомат",
    driveTrain: "Полный 4WD",
    bootType: "Седан",
    buttonLabel: 'Детали'
  },
  {
    id: '3',
    image: [Car1, Car1, Car1, Car1],
    price: '$80 000',
    brand: 'Genesis',
    title: "Genesis G90 3.8 AWD PRESTIGE 2020",
    mileage: "9300 км",
    engine: "3.3 л",
    fuelType: "Бензин",
    transmission: "Автомат",
    driveTrain: "Полный 4WD",
    bootType: "Седан",
    buttonLabel: 'Детали'
  },
  {
    id: '4',
    image: [Car1, Car1, Car1, Car1],
    price: '$80 000',
    brand: 'Genesis',
    title: "Genesis G90 3.8 AWD PRESTIGE 2020",
    mileage: "9300 км",
    engine: "3.3 л",
    fuelType: "Бензин",
    transmission: "Автомат",
    driveTrain: "Полный 4WD",
    bootType: "Седан",  
    buttonLabel: 'Детали'
  },
  ];

  export default carsData;

How can i make a pagination using my local data? I saw lots of tutorials how to make pagination using fetch data. But can't make it using local data.

nightdeath
  • 45
  • 3

0 Answers0