Goods.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { useEffect, useState } from 'react';
  2. import { Route } from 'react-router-dom';
  3. import { connect } from 'react-redux';
  4. import { useRouteMatch } from 'react-router-dom';
  5. import s from './Goods.module.css';
  6. import { asyncGetGoods } from '../../redux/goods/operation';
  7. import { IGoodsProps, IGoodsState } from '../../typescript/goods/interfaces';
  8. import { TRouteMatchName } from '../../typescript/goods/types';
  9. import Good from './Good/Good';
  10. import Pagination from '../PaginationBar/PaginationBar';
  11. const Goods = ({ goodsArr, getGoods }: IGoodsProps) => {
  12. const {
  13. params: { name: routName },
  14. }: TRouteMatchName = useRouteMatch();
  15. console.log(routName);
  16. useEffect(() => {
  17. getGoods();
  18. }, [getGoods]);
  19. const [page, setPage] = useState<number>(1);
  20. const handlePageChange = (page: number) => setPage(page);
  21. return goodsArr ? (
  22. <Route>
  23. <ul className={s.goods_list}>
  24. {goodsArr.length !== 0 &&
  25. goodsArr
  26. .slice((page - 1) * 5, page * 5)
  27. .map((good: any, i: number) => (
  28. <Good key={i} good={good} routName={routName} />
  29. ))}
  30. </ul>
  31. <Pagination
  32. page={page}
  33. total={Math.ceil(goodsArr.length / 5)}
  34. handlePageChange={handlePageChange}
  35. />
  36. </Route>
  37. ) : null;
  38. };
  39. const mapStateToProps = (state: IGoodsState) => ({
  40. goodsArr: state.goods.goodsArr,
  41. });
  42. const mapDispatchToProps = (dispatch: any) => ({
  43. getGoods: () => dispatch(asyncGetGoods()),
  44. });
  45. export default connect(mapStateToProps, mapDispatchToProps)(Goods);