From 098107f38ed83de638fc86ee7cbda3e44015c76a Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Sun, 23 Nov 2025 10:21:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E5=85=B3=E8=81=94?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/StockChart/StockChartModal.js | 41 +++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/components/StockChart/StockChartModal.js b/src/components/StockChart/StockChartModal.js index 30f9b48d..96d553fe 100644 --- a/src/components/StockChart/StockChartModal.js +++ b/src/components/StockChart/StockChartModal.js @@ -1,5 +1,5 @@ // src/components/StockChart/StockChartModal.js - 统一的股票图表组件 -import React, { useState, useEffect, useRef } from 'react'; +import React, { useState, useEffect, useRef, useMemo } from 'react'; import { Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, Button, ButtonGroup, VStack, HStack, Text, Badge, Box, Flex, CircularProgress } from '@chakra-ui/react'; import ReactECharts from 'echarts-for-react'; import * as echarts from 'echarts'; @@ -24,24 +24,26 @@ const StockChartModal = ({ const [chartData, setChartData] = useState(null); const [preloadedData, setPreloadedData] = useState({}); - // 处理关联描述(兼容对象和字符串格式) - const getRelationDesc = () => { - const relationDesc = stock?.relation_desc; + // 处理关联描述(兼容对象和字符串格式)- 使用 useMemo 缓存计算结果 + const relationDesc = useMemo(() => { + const desc = stock?.relation_desc; - if (!relationDesc) return null; + if (!desc) return null; - if (typeof relationDesc === 'string') { - return relationDesc; - } else if (typeof relationDesc === 'object' && relationDesc.data && Array.isArray(relationDesc.data)) { + if (typeof desc === 'string') { + return desc; + } + + if (typeof desc === 'object' && desc.data && Array.isArray(desc.data)) { // 新格式:{data: [{query_part: "...", sentences: "..."}]} - return relationDesc.data + return desc.data .map(item => item.query_part || item.sentences || '') .filter(s => s) .join(';') || null; } return null; - }; + }, [stock?.relation_desc]); // 预加载数据 const preloadData = async (type) => { @@ -540,7 +542,8 @@ const StockChartModal = ({ - + {/* 图表区域 */} + {loading && ( - {getRelationDesc() && ( + {/* 关联描述 */} + {relationDesc && ( - 关联描述: - {getRelationDesc()} + + 关联描述: + + + {relationDesc} + )}