Repository: bradtraversy/simple_react_pagination Branch: master Commit: 8eddd7d7e947 Files: 10 Total size: 5.9 KB Directory structure: gitextract_h056k7l6/ ├── .gitignore ├── README.md ├── package.json ├── public/ │ ├── index.html │ └── manifest.json └── src/ ├── App.css ├── App.js ├── components/ │ ├── Pagination.js │ └── Posts.js └── index.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies /node_modules /.pnp .pnp.js # testing /coverage # production /build # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* ================================================ FILE: README.md ================================================ # Simple React Pagination > Frontend pagination example using React with Hooks ## Available Scripts In the project directory, you can run: ### `npm install` ### `npm start` ================================================ FILE: package.json ================================================ { "name": "react_pagination", "version": "0.1.0", "private": true, "dependencies": { "axios": "^0.19.0", "react": "^16.8.6", "react-dom": "^16.8.6", "react-scripts": "3.0.1" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } } ================================================ FILE: public/index.html ================================================ React Pagination
================================================ FILE: public/manifest.json ================================================ { "short_name": "React App", "name": "Create React App Sample", "icons": [ { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" } ], "start_url": ".", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } ================================================ FILE: src/App.css ================================================ .App { text-align: center; } .App-logo { animation: App-logo-spin infinite 20s linear; height: 40vmin; pointer-events: none; } .App-header { background-color: #282c34; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: calc(10px + 2vmin); color: white; } .App-link { color: #61dafb; } @keyframes App-logo-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } ================================================ FILE: src/App.js ================================================ import React, { useState, useEffect } from 'react'; import Posts from './components/Posts'; import Pagination from './components/Pagination'; import axios from 'axios'; import './App.css'; const App = () => { const [posts, setPosts] = useState([]); const [loading, setLoading] = useState(false); const [currentPage, setCurrentPage] = useState(1); const [postsPerPage] = useState(10); useEffect(() => { const fetchPosts = async () => { setLoading(true); const res = await axios.get('https://jsonplaceholder.typicode.com/posts'); setPosts(res.data); setLoading(false); }; fetchPosts(); }, []); // Get current posts const indexOfLastPost = currentPage * postsPerPage; const indexOfFirstPost = indexOfLastPost - postsPerPage; const currentPosts = posts.slice(indexOfFirstPost, indexOfLastPost); // Change page const paginate = pageNumber => setCurrentPage(pageNumber); return (

My Blog

); }; export default App; ================================================ FILE: src/components/Pagination.js ================================================ import React from 'react'; const Pagination = ({ postsPerPage, totalPosts, paginate }) => { const pageNumbers = []; for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { pageNumbers.push(i); } return ( ); }; export default Pagination; ================================================ FILE: src/components/Posts.js ================================================ import React from 'react'; const Posts = ({ posts, loading }) => { if (loading) { return

Loading...

; } return ( ); }; export default Posts; ================================================ FILE: src/index.js ================================================ import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; ReactDOM.render(, document.getElementById('root'));