优化素材管理模块:重构数据获取逻辑,使用useRef存储分页状态,简化fetchMaterials函数,提升代码可读性和性能。

This commit is contained in:
超级老白兔
2025-09-28 18:11:00 +08:00
parent ed43e67047
commit cb0256c820

View File

@@ -3,7 +3,7 @@ import React, {
useEffect,
forwardRef,
useImperativeHandle,
useCallback,
useRef,
} from "react";
import { Button, Input, Card, message, Popconfirm, Pagination } from "antd";
import {
@@ -56,6 +56,10 @@ const MaterialManagement = forwardRef<any, Record<string, never>>(
total: 0,
});
// 使用 ref 来存储最新的分页状态
const paginationRef = useRef(pagination);
paginationRef.current = pagination;
// 获取类型图标
const getTypeIcon = (type: string) => {
switch (type) {
@@ -71,36 +75,34 @@ const MaterialManagement = forwardRef<any, Record<string, never>>(
};
// 获取素材列表
const fetchMaterials = useCallback(
async (params?: MaterialListParams) => {
try {
setLoading(true);
const requestParams = {
page: pagination.current.toString(),
limit: pagination.pageSize.toString(),
...params,
};
const response = await getMaterialList(requestParams);
if (response) {
setMaterialsList(response.list || []);
setPagination(prev => ({
...prev,
total: response.total || 0,
}));
} else {
setMaterialsList([]);
message.error(response?.message || "获取素材列表失败");
}
} catch (error) {
console.error("获取素材列表失败:", error);
const fetchMaterials = async (params?: MaterialListParams) => {
try {
setLoading(true);
const currentPagination = paginationRef.current;
const requestParams = {
page: currentPagination.current.toString(),
limit: currentPagination.pageSize.toString(),
...params,
};
const response = await getMaterialList(requestParams);
if (response) {
setMaterialsList(response.list || []);
setPagination(prev => ({
...prev,
total: response.total || 0,
}));
} else {
setMaterialsList([]);
message.error("获取素材列表失败");
} finally {
setLoading(false);
message.error(response?.message || "获取素材列表失败");
}
},
[pagination],
);
} catch (error) {
console.error("获取素材列表失败:", error);
setMaterialsList([]);
message.error("获取素材列表失败");
} finally {
setLoading(false);
}
};
// 暴露方法给父组件
useImperativeHandle(ref, () => ({
@@ -142,12 +144,16 @@ const MaterialManagement = forwardRef<any, Record<string, never>>(
current: page,
pageSize: pageSize || prev.pageSize,
}));
// 分页变化后立即获取数据
setTimeout(() => {
fetchMaterials();
}, 0);
};
// 组件挂载和分页变化时获取数据
// 组件挂载时获取数据
useEffect(() => {
fetchMaterials();
}, [fetchMaterials]);
}, []);
return (
<div className={styles.materialContent}>