优化素材管理模块:重构数据获取逻辑,使用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,13 +75,13 @@ const MaterialManagement = forwardRef<any, Record<string, never>>(
};
// 获取素材列表
const fetchMaterials = useCallback(
async (params?: MaterialListParams) => {
const fetchMaterials = async (params?: MaterialListParams) => {
try {
setLoading(true);
const currentPagination = paginationRef.current;
const requestParams = {
page: pagination.current.toString(),
limit: pagination.pageSize.toString(),
page: currentPagination.current.toString(),
limit: currentPagination.pageSize.toString(),
...params,
};
const response = await getMaterialList(requestParams);
@@ -98,9 +102,7 @@ const MaterialManagement = forwardRef<any, Record<string, never>>(
} finally {
setLoading(false);
}
},
[pagination],
);
};
// 暴露方法给父组件
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}>