Skip to content

Commit 008edd6

Browse files
EmilyyyLiu刘欢coderabbitai[bot]
authored
refactor: Upgrade utils and replace useMergedState (#400)
* refactor: Upgrade utils and replace useMergedState * Update src/Collapse.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat: chaneg onItemClick * feat: modify triggerActiveKey * feat: modity triggerActiveKey function * feat: triggerActiveKey function setValue --------- Co-authored-by: 刘欢 <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent bc63f6b commit 008edd6

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"dependencies": {
4848
"@babel/runtime": "^7.10.1",
4949
"@rc-component/motion": "^1.1.4",
50-
"@rc-component/util": "^1.0.1",
50+
"@rc-component/util": "^1.3.0",
5151
"classnames": "2.x"
5252
},
5353
"devDependencies": {

src/Collapse.tsx

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import classNames from 'classnames';
2-
import useMergedState from '@rc-component/util/lib/hooks/useMergedState';
2+
import { useControlledState, useEvent } from '@rc-component/util';
33
import warning from '@rc-component/util/lib/warning';
44
import React from 'react';
55
import useItems from './hooks/useItems';
66
import type { CollapseProps } from './interface';
77
import CollapsePanel from './Panel';
88
import pickAttrs from '@rc-component/util/lib/pickAttrs';
99

10-
function getActiveKeysArray(activeKey: React.Key | React.Key[]) {
10+
function getActiveKeysArray(activeKey: React.Key | React.Key[]): React.Key[] {
1111
let currentActiveKey = activeKey;
1212
if (!Array.isArray(currentActiveKey)) {
1313
const activeKeyType = typeof currentActiveKey;
@@ -38,27 +38,27 @@ const Collapse = React.forwardRef<HTMLDivElement, CollapseProps>((props, ref) =>
3838

3939
const collapseClassName = classNames(prefixCls, className);
4040

41-
const [activeKey, setActiveKey] = useMergedState<React.Key | React.Key[], React.Key[]>([], {
42-
value: rawActiveKey,
43-
onChange: (v) => onChange?.(v as React.Key[]),
44-
defaultValue: defaultActiveKey,
45-
postState: getActiveKeysArray,
46-
});
47-
48-
const onItemClick = (key: React.Key) =>
49-
setActiveKey(() => {
50-
if (accordion) {
51-
return activeKey[0] === key ? [] : [key];
52-
}
41+
const [internalActiveKey, setActiveKey] = useControlledState<React.Key[] | React.Key>(
42+
defaultActiveKey,
43+
rawActiveKey,
44+
);
45+
const activeKey = getActiveKeysArray(internalActiveKey);
5346

54-
const index = activeKey.indexOf(key);
55-
const isActive = index > -1;
56-
if (isActive) {
57-
return activeKey.filter((item) => item !== key);
58-
}
47+
const triggerActiveKey = useEvent((next) => {
48+
const nextKeys = getActiveKeysArray(next);
49+
setActiveKey(nextKeys);
50+
onChange?.(nextKeys);
51+
});
5952

60-
return [...activeKey, key];
61-
});
53+
const onItemClick = (key: React.Key) => {
54+
if (accordion) {
55+
triggerActiveKey(activeKey[0] === key ? [] : [key]);
56+
} else {
57+
triggerActiveKey(
58+
activeKey.includes(key) ? activeKey.filter((item) => item !== key) : [...activeKey, key],
59+
);
60+
}
61+
};
6262

6363
// ======================== Children ========================
6464
warning(

0 commit comments

Comments
 (0)