fix: select label-in-value error #3216

pull/3224/head
tangjinzhou 2020-11-19 23:03:31 +08:00
parent 00455da385
commit 994e709226
2 changed files with 9 additions and 3 deletions

View File

@ -1,5 +1,5 @@
import { warning } from '../../vc-util/warning';
import { isVNode, VNodeChild } from 'vue';
import { cloneVNode, isVNode, VNodeChild } from 'vue';
import {
OptionsType as SelectOptionsType,
OptionData,
@ -151,7 +151,13 @@ export const getLabeledValue: GetLabeledValue<FlattenOptionData[]> = (
warning(false, '`label` of `value` is not same as `label` in Select options.');
}
} else if (item && optionLabelProp in item) {
result.label = item[optionLabelProp];
if (Array.isArray(item[optionLabelProp])) {
result.label = isVNode(item[optionLabelProp][0])
? cloneVNode(item[optionLabelProp][0])
: item[optionLabelProp];
} else {
result.label = item[optionLabelProp];
}
} else {
result.label = value;
}

View File

@ -89,7 +89,7 @@ function warningProps(props: SelectProps) {
warning(
!labelInValue ||
values.every(val => typeof val === 'object' && ('key' in val || 'value' in val)),
'`value` should in shape of `{ value: string | number, label?: ReactNode }` when you set `labelInValue` to `true`',
'`value` should in shape of `{ value: string | number, label?: any }` when you set `labelInValue` to `true`',
);
warning(