From 598c5c68c2cb6b00828cab2e3c4c7ff470ea208a Mon Sep 17 00:00:00 2001 From: dingsheng <727040141@qq.com> Date: Tue, 29 Jun 2021 17:50:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=20activeKey=20=E5=92=8C=20defaultActiveKey?= =?UTF-8?q?=20=E5=AF=BC=E8=87=B4=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/zarm/src/collapse/Collapse.tsx | 51 ++++++++++++++++--------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/packages/zarm/src/collapse/Collapse.tsx b/packages/zarm/src/collapse/Collapse.tsx index 8cc25ebd7..4f5e7ea12 100644 --- a/packages/zarm/src/collapse/Collapse.tsx +++ b/packages/zarm/src/collapse/Collapse.tsx @@ -16,16 +16,31 @@ interface CollapseStates { multiple?: boolean; } -const getActiveKey = (props: CollapseProps) => { +let isMount = true; + +const initActiveKey = (props: CollapseProps) => { const { multiple, activeKey, defaultActiveKey } = props; let value; + if (typeof defaultActiveKey !== 'undefined') { + value = defaultActiveKey; + } + if (typeof activeKey !== 'undefined') { + value = activeKey || defaultActiveKey; + } + + if (value) { + return multiple ? [].concat(value) : value; + } + return multiple ? [] : undefined; +}; + +const getActiveKey = (props: CollapseProps) => { + const { multiple, activeKey } = props; + let value; if (typeof activeKey !== 'undefined') { value = activeKey; } - if (typeof defaultActiveKey !== 'undefined') { - value = defaultActiveKey; - } if (value) { return multiple ? [].concat(value) : value; @@ -45,24 +60,25 @@ export default class Collapse extends Component { static Item: typeof CollapseItem; state: CollapseStates = { - activeKey: getActiveKey(this.props), + activeKey: initActiveKey(this.props), }; static getDerivedStateFromProps(nextProps: CollapseProps, state: CollapseStates) { const newState: CollapseStates = {}; - if ('activeKey' in nextProps && nextProps.activeKey !== state.prevActiveKey) { - newState.activeKey = getActiveKey(nextProps); - newState.prevActiveKey = nextProps.activeKey; - } - if ('animated' in nextProps) { - newState.animated = nextProps.animated; + + if (!isMount) { + if ('activeKey' in nextProps && nextProps.activeKey !== state.activeKey) { + newState.activeKey = getActiveKey(nextProps); + } } - if ('multiple' in nextProps) { - newState.multiple = nextProps.multiple; + + if ('activeKey' in newState) { + return newState; } - return 'activeKey' in newState || 'animated' in newState || 'multiple' in newState - ? newState - : null; + + isMount = false; + + return null; } onItemChange = (onItemChange, key) => { @@ -102,7 +118,8 @@ export default class Collapse extends Component { }; renderItems = () => { - const { activeKey, multiple, animated } = this.state; + const { activeKey } = this.state; + const { multiple, animated } = this.props; return Children.map(this.props.children, (ele: ReactElement) => { const { disabled, onChange } = ele.props; const { key } = ele;