优化素材管理模块:重构数据获取逻辑,使用useRef存储分页状态,简化fetchMaterials函数,提升代码可读性和性能。
This commit is contained in:
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user