当前位置:首页 > 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 基础概念 React 是一个用于构建用户界面的 JavaScript 库,专注于组件化开发。通过虚拟 DOM 和高效的渲染机制,React 能够实现高性能的 UI 更新。 安装 R…

react如何销毁

react如何销毁

销毁 React 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数组件…

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常…

vue搜索过后实现分页

vue搜索过后实现分页

实现 Vue 搜索后分页的方法 数据绑定与搜索逻辑 在 Vue 组件中定义数据属性,包括原始数据列表、搜索关键词、分页相关参数: data() { return { originalLi…

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的基本思想 下拉分页(Infinite Scroll)是一种常见的分页加载方式,当用户滚动到页面底部时自动加载下一页数据。Vue 中可以通过监听滚动事件或使用第三方库实现。 监听滚动事件…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…