当前位置:首页 > React

react flask 实现分页

2026-01-27 03:23:37React

实现 React + Flask 分页功能

前端 React 部分

安装 axios 用于发送请求:

npm install axios

创建分页组件 Pagination.js:

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function Pagination() {
  const [items, setItems] = useState([]);
  const [currentPage, setCurrentPage] = useState(1);
  const [itemsPerPage] = useState(10);
  const [totalItems, setTotalItems] = useState(0);

  useEffect(() => {
    const fetchData = async () => {
      const res = await axios.get(`/api/items?page=${currentPage}&per_page=${itemsPerPage}`);
      setItems(res.data.items);
      setTotalItems(res.data.total);
    };
    fetchData();
  }, [currentPage, itemsPerPage]);

  const paginate = (pageNumber) => setCurrentPage(pageNumber);

  return (
    <div>
      <ul>
        {items.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
      <div>
        {Array.from({length: Math.ceil(totalItems / itemsPerPage)}).map((_, index) => (
          <button key={index} onClick={() => paginate(index + 1)}>
            {index + 1}
          </button>
        ))}
      </div>
    </div>
  );
}

export default Pagination;

后端 Flask 部分

安装必要的 Flask 扩展:

pip install flask flask-sqlalchemy

创建 Flask 应用 app.py:

react flask 实现分页

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

@app.route('/api/items', methods=['GET'])
def get_items():
    page = request.args.get('page', 1, type=int)
    per_page = request.args.get('per_page', 10, type=int)

    items = Item.query.paginate(page=page, per_page=per_page, error_out=False)

    return jsonify({
        'items': [{'id': item.id, 'name': item.name} for item in items.items],
        'total': items.total
    })

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

前后端连接

确保 React 开发服务器代理 Flask 后端请求。在 React 项目的 package.json 中添加:

"proxy": "http://localhost:5000"

数据库初始化

运行 Flask 应用前创建数据库并添加测试数据:

react flask 实现分页

with app.app_context():
    db.create_all()
    # 添加测试数据
    if not Item.query.first():
        for i in range(1, 101):
            db.session.add(Item(name=f'Item {i}'))
        db.session.commit()

样式优化

为分页按钮添加基本样式:

button {
  margin: 0 5px;
  padding: 5px 10px;
  cursor: pointer;
}

button.active {
  background-color: #007bff;
  color: white;
}

错误处理

添加基本错误处理:

const fetchData = async () => {
  try {
    const res = await axios.get(`/api/items?page=${currentPage}&per_page=${itemsPerPage}`);
    setItems(res.data.items);
    setTotalItems(res.data.total);
  } catch (error) {
    console.error('Error fetching data:', error);
  }
};

性能优化

实现防抖减少频繁请求:

useEffect(() => {
  const debounceTimer = setTimeout(() => {
    fetchData();
  }, 300);

  return () => clearTimeout(debounceTimer);
}, [currentPage, itemsPerPage]);

标签: 分页react
分享给朋友:

相关文章

react如何保养

react如何保养

保持组件简洁 将大型组件拆分为更小、更专注的组件,每个组件只负责单一功能。避免在单个组件中处理过多逻辑或状态,这有助于提高可维护性和可测试性。 合理使用状态管理 根据应用复杂度选择状态管理方案。简单…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。 con…