From 0186219586b75227bf69ce0e514c3ed94c52e1cc Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Fri, 21 Jan 2022 11:03:10 +0800 Subject: [PATCH] fix(Picker): error when options is empty --- packages/vant/src/picker/Picker.tsx | 17 +++++------------ packages/vant/src/picker/utils.ts | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 13 deletions(-) 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 + ); +}