From d52b7911a996dbba7b11bf119589e00cb8a78f69 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Fri, 6 Feb 2026 18:02:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E9=83=A8=E5=88=86=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD=EF=BC=8C=E5=8F=AA=E6=9C=89?= =?UTF-8?q?=E4=BC=A0=E5=85=A5=E5=AF=B9=E5=BA=94=E6=96=B9=E6=B3=95=E7=9C=9F?= =?UTF-8?q?=E6=AD=A3=E9=9C=80=E8=A6=81=E8=8E=B7=E5=8F=96=E5=80=BC=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=E6=89=8D=E8=BF=9B=E8=A1=8C=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=20=E5=B0=86=E5=AF=B9=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E4=BD=BF?= =?UTF-8?q?=E7=94=A8useMemo=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cascader/Basic/index.js | 16 +++--- src/components/LeftTree/Basic/index.js | 2 +- src/components/Select/Basic/index.js | 54 +++++++++---------- src/components/SelectTree/Basic/index.js | 66 ++++++++++++++---------- 4 files changed, 78 insertions(+), 60 deletions(-) diff --git a/src/components/Cascader/Basic/index.js b/src/components/Cascader/Basic/index.js index 7316602..05303ae 100644 --- a/src/components/Cascader/Basic/index.js +++ b/src/components/Cascader/Basic/index.js @@ -1,5 +1,5 @@ import { Cascader } from "antd"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; import { processTreeDataByLevel } from "../../../utils"; /** @@ -21,14 +21,16 @@ function BasicCascader(props) { } = props; // 根据 level 处理树数据 - const processedData = level - ? processTreeDataByLevel({ + const processedData = useMemo(() => { + return level + ? processTreeDataByLevel({ data, level, childrenKey, currentLevel: 1, }) - : data; + : data; + }, [data, level, childrenKey]); const getNodePaths = (selectedOptions) => { let nodePaths = selectedOptions; @@ -39,8 +41,10 @@ function BasicCascader(props) { }; const handleChange = (value, selectedOptions) => { - const parentNodes = getNodePaths(selectedOptions); - onGetNodePaths?.(parentNodes); + if (selectedOptions && onGetNodePaths) { + const parentNodes = getNodePaths(selectedOptions); + onGetNodePaths?.(parentNodes); + } onChange?.(value, selectedOptions); }; diff --git a/src/components/LeftTree/Basic/index.js b/src/components/LeftTree/Basic/index.js index 5d7bc04..50f7640 100644 --- a/src/components/LeftTree/Basic/index.js +++ b/src/components/LeftTree/Basic/index.js @@ -74,7 +74,7 @@ const BasicLeftTree = (props) => { }; const handleSelect = (selectedKeys, event) => { - if (selectedKeys.length > 0) { + if (selectedKeys.length > 0 && onGetNodePaths) { const selectedNodeId = selectedKeys[0]; const parentNodes = getTreeNodePaths({ data: treeData, diff --git a/src/components/Select/Basic/index.js b/src/components/Select/Basic/index.js index f634cfc..9d05974 100644 --- a/src/components/Select/Basic/index.js +++ b/src/components/Select/Basic/index.js @@ -19,34 +19,36 @@ function BasicSelect(props) { } = props; const handleChange = (event, option) => { - if (Array.isArray(event)) { - if (event.length > 0) { - const findItems = []; - const names = []; - event.forEach((item) => { - const findItem = data.find(dataItem => dataItem[idKey] === item); - if (findItem) { - findItems.push(findItem); - names.push(findItem[nameKey]); - } - }); - onGetLabel?.(names); - onGetOption?.(findItems); + if (onGetLabel || onGetOption) { + if (Array.isArray(event)) { + if (event.length > 0) { + const findItems = []; + const names = []; + event.forEach((item) => { + const findItem = data.find(dataItem => dataItem[idKey] === item); + if (findItem) { + findItems.push(findItem); + names.push(findItem[nameKey]); + } + }); + onGetLabel?.(names); + onGetOption?.(findItems); + } + else { + onGetLabel?.([]); + onGetOption?.([]); + } } else { - onGetLabel?.([]); - onGetOption?.([]); - } - } - else { - if (event) { - const findItem = data.find(item => item[idKey] === event); - onGetLabel?.(findItem[nameKey]); - onGetOption?.(findItem); - } - else { - onGetLabel?.(""); - onGetOption?.({}); + if (event) { + const findItem = data.find(item => item[idKey] === event); + onGetLabel?.(findItem[nameKey]); + onGetOption?.(findItem); + } + else { + onGetLabel?.(""); + onGetOption?.({}); + } } } onChange?.(event, option); diff --git a/src/components/SelectTree/Basic/index.js b/src/components/SelectTree/Basic/index.js index 7748cc4..ed9bbf1 100644 --- a/src/components/SelectTree/Basic/index.js +++ b/src/components/SelectTree/Basic/index.js @@ -1,5 +1,5 @@ import { TreeSelect } from "antd"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; import { arrayObjectDeduplication, getDataType, getTreeNodePaths, processTreeDataByLevel, processTreeDataForOnlyLastLevel } from "../../../utils"; /** @@ -22,49 +22,61 @@ function BasicSelectTree(props) { ...restProps } = props; - // 根据 level 处理树数据 - let processedTreeData = level - ? processTreeDataByLevel({ + const processedTreeData = useMemo(() => { + // 根据 level 处理树数据 + let result = level + ? processTreeDataByLevel({ data: treeData, level, childrenKey, currentLevel: 1, }) - : treeData; + : treeData; - // 根据 onlyLastLevel 处理树数据 - processedTreeData = processTreeDataForOnlyLastLevel({ data: processedTreeData, childrenKey, onlyLastLevel }); + // 根据 onlyLastLevel 处理树数据 + result = processTreeDataForOnlyLastLevel({ + data: result, + childrenKey, + onlyLastLevel, + }); + + return result; + }, [treeData, level, childrenKey, onlyLastLevel]); const handleChange = (value, label, extra) => { if (value) { if (getDataType(value) === "Array") { - const parentNodes = []; - for (let i = 0; i < value.length; i++) { - const targetId = (restProps.labelInValue || restProps.treeCheckStrictly) ? value[i].value : value[i]; - const currentParentNodes = getTreeNodePaths({ + if (onGetNodePaths) { + const parentNodes = []; + for (let i = 0; i < value.length; i++) { + const targetId = (restProps.labelInValue || restProps.treeCheckStrictly) ? value[i].value : value[i]; + const currentParentNodes = getTreeNodePaths({ + data: treeData, + targetId, + idKey, + childrenKey, + isIncludeOneself: onGetNodePathsIsIncludeOneself, + }); + parentNodes.push(...currentParentNodes); + } + const deduplicationParentNodes = arrayObjectDeduplication(parentNodes, idKey); + onGetNodePaths?.(deduplicationParentNodes); + } + onGetLabel?.((restProps.labelInValue || restProps.treeCheckStrictly) ? value.map(item => item.label) : label); + } + else { + if (onGetNodePaths || onGetLabel) { + const targetId = (restProps.labelInValue || restProps.treeCheckStrictly) ? value.value : value; + const parentNodes = getTreeNodePaths({ data: treeData, targetId, idKey, childrenKey, isIncludeOneself: onGetNodePathsIsIncludeOneself, }); - parentNodes.push(...currentParentNodes); + onGetNodePaths?.(parentNodes); + onGetLabel?.(parentNodes[parentNodes.length - 1][nameKey]); } - const deduplicationParentNodes = arrayObjectDeduplication(parentNodes, idKey); - onGetNodePaths?.(deduplicationParentNodes); - onGetLabel?.((restProps.labelInValue || restProps.treeCheckStrictly) ? value.map(item => item.label) : label); - } - else { - const targetId = (restProps.labelInValue || restProps.treeCheckStrictly) ? value.value : value; - const parentNodes = getTreeNodePaths({ - data: treeData, - targetId, - idKey, - childrenKey, - isIncludeOneself: onGetNodePathsIsIncludeOneself, - }); - onGetNodePaths?.(parentNodes); - onGetLabel?.(parentNodes[parentNodes.length - 1][nameKey]); } } else {