React 列表页面中管理接口请求的参数

在 React 列表页面中管理接口请求的参数时,通常涉及到以下几个步骤:

  1. 使用 useState 管理请求参数:将所有需要的请求参数(如分页、筛选条件、排序等)存储在 useState 中。
  2. 使用 useEffect 触发数据请求:每当请求参数发生变化时,通过 useEffect 钩子重新发起请求。
  3. 构建和发送请求:根据当前的请求参数构建请求,并通过 Axios 发送请求。
  4. 处理响应数据:将响应数据保存到组件状态中,以便渲染列表。

示例代码:

javascript 复制代码
import React, { useState, useEffect } from 'react';
import axios from 'axios';

const ProductList = () => {
  // 管理请求参数
  const [params, setParams] = useState({
    page: 1,
    pageSize: 10,
    category: '',
    sortBy: 'name',
    sortOrder: 'asc',
  });

  // 管理列表数据和加载状态
  const [products, setProducts] = useState([]);
  const [loading, setLoading] = useState(false);

  // 请求数据函数
  const fetchData = async () => {
    setLoading(true);
    try {
      const response = await axios.get('/api/products', { params });
      setProducts(response.data);
    } catch (error) {
      console.error('Error fetching data:', error);
    } finally {
      setLoading(false);
    }
  };

  // 每当请求参数变化时触发数据请求
  useEffect(() => {
    fetchData();
  }, [params]);

  // 更新请求参数的函数
  const updateParams = (newParams) => {
    setParams(prevParams => ({
      ...prevParams,
      ...newParams,
    }));
  };

  return (
    <div>
      <div>
        <input
          type="text"
          placeholder="Search by category"
          onChange={(e) => updateParams({ category: e.target.value, page: 1 })}
        />
        <select onChange={(e) => updateParams({ sortBy: e.target.value, page: 1 })}>
          <option value="name">Sort by Name</option>
          <option value="price">Sort by Price</option>
        </select>
        <button onClick={() => updateParams({ sortOrder: params.sortOrder === 'asc' ? 'desc' : 'asc' })}>
          Toggle Sort Order
        </button>
      </div>

      {loading ? (
        <p>Loading...</p>
      ) : (
        <ul>
          {products.map(product => (
            <li key={product.id}>{product.name} - {product.category} - ${product.price}</li>
          ))}
        </ul>
      )}

      <div>
        <button
          disabled={params.page === 1}
          onClick={() => updateParams({ page: params.page - 1 })}
        >
          Previous Page
        </button>
        <button
          onClick={() => updateParams({ page: params.page + 1 })}
        >
          Next Page
        </button>
      </div>
    </div>
  );
};

export default ProductList;
相关推荐
killerbasd9 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌10 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈10 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫10 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝10 小时前
svg图片
前端·css·学习·html·css3
橘子编程10 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇10 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧11 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰11 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong2311 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习