Как настроить пагинацию на React?

Ссылка скопирована
1 ответ

Проблема переключения. Выдает такую ошибку при входе

Как настроить пагинацию на React?

Если ее закрыть и нажать на приходящий номер страницы, то выдаст такую

Как настроить пагинацию на React?

Код reducer

const FOLLOWED = "ADD-POST"; const UN_FOLLOWED = "UPDATE-NEW-POST-TEXT" const SET_USERS = "SET-USERS" const SET_CURRENT_PAGE = "SET-CURRENT-PAGE" const SET_TOTAL_USERS_COUNT = "SET-TOTAL-USERS-COUNT" let initializationState = {   users: [   ], pageSize: 19, totalCountUser: 0, currentUsers: 2,     }  const userReducer = (state = initializationState, action) => { switch(action.type) {     case FOLLOWED:    return {     ...state,     users: state.users.map (u => {         if (u.id === action.userId) {             return {...u, followed: true}                     }         return u     })    }    case UN_FOLLOWED:     return {         ...state,         users: state.users.map (u => {             if (u.id === action.userId) {                 return {...u, followed: false}                             }             return u         })        }        case SET_CURRENT_PAGE:     return {         ...state, currentUsers: action.currentUsers               }         case SET_USERS: {                   return {                 ...state, users: action.users             }         }         case SET_TOTAL_USERS_COUNT: {                   return {                 ...state, totalCountUser: action.count             }         }     default:              return state;  }     } export const followAC = (userId) => ({type: FOLLOWED, userId}) export const unFollowowAC = (userId) => ({type: UN_FOLLOWED, userId}) export const setUsersAC = (user) => ({type: SET_USERS, user}) export const setCurrentPageAC = (currentUsers) => ({type: SET_CURRENT_PAGE, currentUsers}) export const setUsersTotalCountAC = (totalCountUser) => ({type: SET_TOTAL_USERS_COUNT, count: totalCountUser}) export default userReducer

const FOLLOWED = "ADD-POST"; const UN_FOLLOWED = "UPDATE-NEW-POST-TEXT" const SET_USERS = "SET-USERS" const SET_CURRENT_PAGE = "SET-CURRENT-PAGE" const SET_TOTAL_USERS_COUNT = "SET-TOTAL-USERS-COUNT" let initializationState = { users: [ ], pageSize: 19, totalCountUser: 0, currentUsers: 2, } const userReducer = (state = initializationState, action) => { switch(action.type) { case FOLLOWED: return { ...state, users: state.users.map (u => { if (u.id === action.userId) { return {...u, followed: true} } return u }) } case UN_FOLLOWED: return { ...state, users: state.users.map (u => { if (u.id === action.userId) { return {...u, followed: false} } return u }) } case SET_CURRENT_PAGE: return { ...state, currentUsers: action.currentUsers } case SET_USERS: { return { ...state, users: action.users } } case SET_TOTAL_USERS_COUNT: { return { ...state, totalCountUser: action.count } } default: return state; } } export const followAC = (userId) => ({type: FOLLOWED, userId}) export const unFollowowAC = (userId) => ({type: UN_FOLLOWED, userId}) export const setUsersAC = (user) => ({type: SET_USERS, user}) export const setCurrentPageAC = (currentUsers) => ({type: SET_CURRENT_PAGE, currentUsers}) export const setUsersTotalCountAC = (totalCountUser) => ({type: SET_TOTAL_USERS_COUNT, count: totalCountUser}) export default userReducer

Код контейнерной компоненты

import { connect } from "react-redux" import { followAC, unFollowowAC, setUsersAC, setCurrentPageAC, setUsersTotalCountAC } from "../../redux/user-reducer" import Users from "./User"  let mapStateToProps = (state) => {      return {          pageSize: state.usersPage.pageSize,      totalUsersCount: state.usersPage.totalCountUser,      currentUsers: state.usersPage.currentUsers,     }         }      let mapDispatchToProps = (dispatch) => {     debugger     return {         follow: (userId) => {     dispatch(followAC(userId))       },       unFollowow: (userId) => {         dispatch(unFollowowAC(userId))       },       setUsers: (user) => {         dispatch(setUsersAC(user))       },setcurrentUsers: (pageNumber) => {         dispatch(setCurrentPageAC(pageNumber))       },       setTotalUsersCount: (totalCount) => {         dispatch(setUsersTotalCountAC(totalCount))       }     }     }  export default connect(mapStateToProps, mapDispatchToProps)(Users)

import { connect } from "react-redux" import { followAC, unFollowowAC, setUsersAC, setCurrentPageAC, setUsersTotalCountAC } from "../../redux/user-reducer" import Users from "./User" let mapStateToProps = (state) => { return { pageSize: state.usersPage.pageSize, totalUsersCount: state.usersPage.totalCountUser, currentUsers: state.usersPage.currentUsers, } } let mapDispatchToProps = (dispatch) => { debugger return { follow: (userId) => { dispatch(followAC(userId)) }, unFollowow: (userId) => { dispatch(unFollowowAC(userId)) }, setUsers: (user) => { dispatch(setUsersAC(user)) },setcurrentUsers: (pageNumber) => { dispatch(setCurrentPageAC(pageNumber)) }, setTotalUsersCount: (totalCount) => { dispatch(setUsersTotalCountAC(totalCount)) } } } export default connect(mapStateToProps, mapDispatchToProps)(Users)

Код самой компоненты

import React from "react" import axios from "axios"; import s from "./user.module.css" import userPhoto from "../../acces/img/png-transparent-computer-icons-user-avatar-avatar-face-heroes-monochrome.png"  function Users (props) {  debugger     const baseURL = `https://social-network.samuraijs.com/api/1.0/users?page=${props.currentUsers}&count=${props.pageSize}`;     const [post, setPost] = React.useState(null);    React.useEffect(() => {     axios.get(baseURL).then((response) => {            setPost(response.data);       props.setTotalUsersCount(response.data.totalCount)           });   }, []);       if (!post) return null;    function onPostChanged (pageNumber)  {     const baseURLTwo = `https://social-network.samuraijs.com/api/1.0/users?page=${pageNumber}&count=${props.pageSize}`;     const [p, setTotalUsersCount] = React.useState(null);    React.useEffect(() => {     axios.get(baseURLTwo).then((response) => {       props.setcurrentUsers(pageNumber)            });   }, []);         }     let pageCount = Math.ceil(props.totalUsersCount / props.pageSize);     let pageL = [];     for(let i = 1; i <= pageCount; i++) {       pageL.push(i)        }     debugger     return    <>     <div>      {       pageL.map(p => {                return     <div  className={props.currentUsers === p && s.big} onClick={() => {onPostChanged(p)}}>{p}</div>         debugger       })      }         {          post.items.map( u => <div key={u.id}>   <div className={s.card}>     <img  className={s.card_img} src={userPhoto} alt="avatar" /> <div className={s.card_text}>     <div> <p className={s.card_name}>{u.name}</p> <p>1 общий друг</p> </div> <div>      { // МЕСТО С ОТОБРАЖЕНИЕМ КАРТИНОК u.followed  ? <button className={s.adduser}  onClick={() => {props.unFollowow(u.id)}}><img className={s.adduser} src="https://www.svgrepo.com/show/487269/delete-profile.svg" alt="u" /></button>    : <button className={s.adduser}  onClick={() => {props.follow(u.id)}}><img className={s.adduser}  src="https://www.svgrepo.com/show/47844/add-friend.svg" alt="f" /></button>  } </div>   </div> </div>     </div>) }     </div>           </>           }     export default Users

import React from "react" import axios from "axios"; import s from "./user.module.css" import userPhoto from "../../acces/img/png-transparent-computer-icons-user-avatar-avatar-face-heroes-monochrome.png" function Users (props) { debugger const baseURL = `https://social-network.samuraijs.com/api/1.0/users?page=${props.currentUsers}&count=${props.pageSize}`; const [post, setPost] = React.useState(null); React.useEffect(() => { axios.get(baseURL).then((response) => { setPost(response.data); props.setTotalUsersCount(response.data.totalCount) }); }, []); if (!post) return null; function onPostChanged (pageNumber) { const baseURLTwo = `https://social-network.samuraijs.com/api/1.0/users?page=${pageNumber}&count=${props.pageSize}`; const [p, setTotalUsersCount] = React.useState(null); React.useEffect(() => { axios.get(baseURLTwo).then((response) => { props.setcurrentUsers(pageNumber) }); }, []); } let pageCount = Math.ceil(props.totalUsersCount / props.pageSize); let pageL = []; for(let i = 1; i <= pageCount; i++) { pageL.push(i) } debugger return <> <div> { pageL.map(p => { return <div className={props.currentUsers === p && s.big} onClick={() => {onPostChanged(p)}}>{p}</div> debugger }) } { post.items.map( u => <div key={u.id}> <div className={s.card}> <img className={s.card_img} src={userPhoto} alt="avatar" /> <div className={s.card_text}> <div> <p className={s.card_name}>{u.name}</p> <p>1 общий друг</p> </div> <div> { // МЕСТО С ОТОБРАЖЕНИЕМ КАРТИНОК u.followed ? <button className={s.adduser} onClick={() => {props.unFollowow(u.id)}}><img className={s.adduser} src="https://www.svgrepo.com/show/487269/delete-profile.svg" alt="u" /></button> : <button className={s.adduser} onClick={() => {props.follow(u.id)}}><img className={s.adduser} src="https://www.svgrepo.com/show/47844/add-friend.svg" alt="f" /></button> } </div> </div> </div> </div>) } </div> </> } export default Users

Дополнительно:

Выдает такую ошибку при входе

Замечательно. А там что, какие-то иероглифы написаны, несвязный текст или рандомный набор букв, что ты не смог её прочитать?

React говорит - кастомный хук и компонент названы неправильно (нарушен code-style). Просто поменяйте название по указанным рекомендациям (они на скрине прям).

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Для настройки пагинации на React, вам следует создать компонент Pagination, который будет отображать номера страниц и позволять пользователю переключаться между ними. В этом компоненте вы можете использовать состояние для отслеживания текущей страницы и количества страниц, а также обработчики событий для обновления текущей страницы.

Прежде всего, установите необходимые зависимости, такие как react и react-dom, если они еще не установлены, с помощью npm или yarn:

```bash
npm install react react-dom
```

Затем создайте компонент Pagination:

```html


{Array.from({ length: totalPages }, (_, index) => (

)}

```

Используйте состояние для отслеживания текущей страницы и количества страниц:

```javascript
import React, { useState } from 'react';

const Pagination = ({ totalPages }) => {
const [currentPage, setCurrentPage] = useState(1);

return (


{Array.from({ length: totalPages }, (_, index) => (

)}

);
};

export default Pagination;
```

Используйте этот компонент в вашем приложении, передав количество страниц в качестве пропса:

```javascript
import React from 'react';
import Pagination from './Pagination';

const App = () => {
return (

My App

);
};

export default App;
```

Теперь у вас есть простой компонент Pagination, который позволяет пользователям переключаться между страницами. Вы можете настроить внешний вид и функциональность этого компонента в соответствии с вашими потребностями и дизайном.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно