Skip to content

Commit 3c1b5e4

Browse files
authoredMar 17, 2022
fix(Transfer): 修复Map对象引用拷贝导致的BUG (#688)
1 parent 369fa95 commit 3c1b5e4

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed
 

‎packages/react-transfer/src/index.tsx

+18-19
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function Transfer(props: TransferProps) {
3636
const {
3737
placeholder,
3838
options,
39-
value,
39+
value = [],
4040
showSearch = false,
4141
selectedAll = false,
4242

@@ -62,13 +62,12 @@ function Transfer(props: TransferProps) {
6262
});
6363

6464
useEffect(() => {
65-
leftSelectedKeySet([]);
66-
rightSelectedKeySet([]);
65+
if (value) {
66+
rightOpionSet(value || []);
6767

68-
rightOpionSet(value || []);
69-
70-
value?.forEach((selectd) => selectOption.set(selectd.key, selectd.label));
71-
hiddenNode((child) => !!value?.find((selectd) => child.key === selectd.key));
68+
value?.forEach((selectd) => selectOption.set(selectd.key, selectd.label));
69+
hiddenNode((child) => !!value?.find((selectd) => child.key === selectd.key));
70+
}
7271
}, [JSON.stringify(value)]);
7372

7473
const hiddenNode = (callBackfn: (child: TreeData) => boolean) => {
@@ -136,20 +135,22 @@ function Transfer(props: TransferProps) {
136135
};
137136

138137
const transferClick = (transferType: 'left' | 'right') => {
139-
let selectOptionTemp = selectOption;
140138
if (transferType === 'left') {
141139
leftSelectOption.forEach((value, key) => {
142-
selectOptionTemp.set(key, value);
140+
selectOption.set(key, value);
143141
});
144-
leftSelectOptionSet(selectOptionTemp);
142+
leftSelectOptionSet(new Map());
143+
leftSelectedKeySet([]);
145144
} else {
146145
rightSelectedKeys.forEach((key) => {
147146
selectOption.delete(key!);
148147
});
148+
rightSelectedKeySet([]);
149149
}
150-
selectOptionSet(selectOptionTemp);
150+
151+
selectOptionSet(selectOption);
151152
const option: Array<TransferOptionType> = [];
152-
selectOptionTemp.forEach((label, key) => option.push({ key, label }));
153+
selectOption.forEach((label, key) => option.push({ key, label }));
153154
props.onChange?.(transferType, option);
154155
};
155156

@@ -192,17 +193,19 @@ function Transfer(props: TransferProps) {
192193
selectedOptionsRecursion(child.children);
193194
}
194195
if (!child.hideNode) {
195-
selectOption.set(child.key!, child.label as string);
196+
leftSelectOption.set(child.key!, child.label as string);
196197
keys.push(child.key!);
197198
}
198199
});
199200
};
200201
selectedOptionsRecursion(selectedOptions);
202+
203+
leftSelectOptionSet(leftSelectOption);
201204
leftSelectedKeySet(keys);
202205
} else {
203206
leftSelectedKeySet([]);
207+
leftSelectOptionSet(new Map());
204208
}
205-
selectOptionSet(selectOption);
206209
selectAllCheckedSet(selectAllChecked);
207210
};
208211

@@ -211,15 +214,11 @@ function Transfer(props: TransferProps) {
211214

212215
selectAllChecked.right = isChecked ? 1 : 0;
213216
if (isChecked) {
214-
const keys = rightOpions.map((child) => {
215-
selectOption.delete(child.key!);
216-
return child.key;
217-
});
217+
const keys = rightOpions.map((child) => child.key);
218218
rightSelectedKeySet(keys);
219219
} else {
220220
rightSelectedKeySet([]);
221221
}
222-
selectOptionSet(selectOption);
223222
selectAllCheckedSet(selectAllChecked);
224223
};
225224

0 commit comments

Comments
 (0)
Please sign in to comment.