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 {