当前位置:首页 > 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:

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 应用前创建数据库并添加测试数据:

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);
  }
};

性能优化

实现防抖减少频繁请求:

react flask 实现分页

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

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

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

相关文章

react 如何引入css

react 如何引入css

在 React 中引入 CSS 的方法 React 提供了多种引入 CSS 的方式,可以根据项目需求选择合适的方法。以下是常见的几种方式: 内联样式 内联样式直接在组件中通过 style 属性定义,…

vue实现后台分页

vue实现后台分页

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

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

react如何下载

react如何下载

安装 React 的步骤 通过 npm 或 yarn 安装 React,确保已安装 Node.js(版本建议 ≥ 14.0.0)。打开终端或命令行工具,运行以下命令: npx create-reac…

react如何注销

react如何注销

React 组件的注销方法 在 React 中,组件的注销通常指的是在组件卸载时执行清理操作,例如取消订阅、清除定时器或释放资源。以下是几种常见的方法: 使用 useEffect 钩子的清理函数…