diff --git a/packages/vant/src/picker/Picker.tsx b/packages/vant/src/picker/Picker.tsx index 55bf7a92f..d9358f0dc 100644 --- a/packages/vant/src/picker/Picker.tsx +++ b/packages/vant/src/picker/Picker.tsx @@ -26,6 +26,7 @@ import { findOptionByValue, formatCascadeColumns, getFirstEnabledOption, + assignDefaultFields, } from './utils'; // Composables @@ -82,17 +83,7 @@ export default defineComponent({ linkChildren(); - const fields = computed( - (): Required => - extend( - { - text: 'text', - value: 'value', - children: 'children', - }, - props.columnsFieldNames - ) - ); + const fields = computed(() => assignDefaultFields(props.columnsFieldNames)); const optionHeight = computed(() => unitToPx(props.optionHeight)); const columnsType = computed(() => getColumnsType(props.columns, fields.value) @@ -128,7 +119,9 @@ export default defineComponent({ selectedValues.value.forEach((value, index) => { const options = currentColumns.value[index]; if (!options.find((option) => option[fields.value.value] === value)) { - selectedValues.value[index] = options[0][fields.value.value]; + selectedValues.value[index] = options.length + ? options[0][fields.value.value] + : undefined; } }); } diff --git a/packages/vant/src/picker/utils.ts b/packages/vant/src/picker/utils.ts index 26a216405..7836478e5 100644 --- a/packages/vant/src/picker/utils.ts +++ b/packages/vant/src/picker/utils.ts @@ -1,4 +1,4 @@ -import { isDef, clamp } from '../utils'; +import { isDef, clamp, extend } from '../utils'; import type { Ref } from 'vue'; import type { PickerOption, PickerColumn, PickerFieldNames } from './types'; @@ -95,3 +95,16 @@ export function isValuesEqual( valuesA.every((value, index) => value === valuesB[index]) ); } + +export function assignDefaultFields( + fields: PickerFieldNames | undefined +): Required { + return extend( + { + text: 'text', + value: 'value', + children: 'children', + }, + fields + ); +}