feat: 更新素材表单组件,优化状态管理和数据获取逻辑,移除不必要的状态,使用useCallback提升性能

This commit is contained in:
超级老白兔
2025-07-29 16:11:17 +08:00
parent d277cd6518
commit 63df76bf01

View File

@@ -1,7 +1,7 @@
import React, { useState, useEffect } from "react";
import React, { useState, useEffect, useCallback } from "react";
import { useNavigate, useParams } from "react-router-dom";
import { Button, Toast, SpinLoading, Card } from "antd-mobile";
import { Input, TimePicker, Select } from "antd";
import { Input, Select } from "antd";
import {
ArrowLeftOutlined,
SaveOutlined,
@@ -20,7 +20,6 @@ import {
createContentItem,
updateContentItem,
} from "./api";
import { ContentItem } from "./data";
import style from "./index.module.scss";
const { Option } = Select;
@@ -43,7 +42,6 @@ const MaterialForm: React.FC = () => {
}>();
const [loading, setLoading] = useState(false);
const [saving, setSaving] = useState(false);
const [material, setMaterial] = useState<ContentItem | null>(null);
// 表单状态
const [contentType, setContentType] = useState<number>(4);
@@ -52,9 +50,6 @@ const MaterialForm: React.FC = () => {
const [comment, setComment] = useState("");
const [sendTime, setSendTime] = useState("");
const [resUrls, setResUrls] = useState<string[]>([]);
const [urls, setUrls] = useState<
{ desc: string; image: string; url: string }[]
>([]);
// 链接相关状态
const [linkDesc, setLinkDesc] = useState("");
@@ -68,13 +63,7 @@ const MaterialForm: React.FC = () => {
const isEdit = !!materialId;
// 获取素材详情
useEffect(() => {
if (isEdit && materialId) {
fetchMaterialDetail();
}
}, [isEdit, materialId]);
const fetchMaterialDetail = async () => {
const fetchMaterialDetail = useCallback(async () => {
if (!materialId) return;
setLoading(true);
try {
@@ -95,7 +84,6 @@ const MaterialForm: React.FC = () => {
}
setResUrls(response.resUrls || []);
setUrls(response.urls || []);
// 设置链接相关数据
if (response.urls && response.urls.length > 0) {
@@ -111,7 +99,13 @@ const MaterialForm: React.FC = () => {
} finally {
setLoading(false);
}
};
}, [materialId]);
useEffect(() => {
if (isEdit && materialId) {
fetchMaterialDetail();
}
}, [isEdit, materialId, fetchMaterialDetail]);
const handleSubmit = async () => {
if (!libraryId) return;
@@ -149,14 +143,13 @@ const MaterialForm: React.FC = () => {
urls: finalUrls,
};
let response;
if (isEdit) {
response = await updateContentItem({
await updateContentItem({
id: materialId!,
...params,
});
} else {
response = await createContentItem(params);
await createContentItem(params);
}
// 直接使用返回数据无需判断code
@@ -269,7 +262,6 @@ const MaterialForm: React.FC = () => {
value={linkImage ? [linkImage] : []}
onChange={urls => setLinkImage(urls[0] || "")}
count={1}
listType="picture-card"
/>
</div>
@@ -314,7 +306,6 @@ const MaterialForm: React.FC = () => {
value={resUrls}
onChange={setResUrls}
count={9}
listType="picture-card"
/>
</div>
<div
@@ -357,7 +348,6 @@ const MaterialForm: React.FC = () => {
value={resUrls}
onChange={setResUrls}
count={9}
listType="picture-card"
/>
</div>
</>