diff --git a/packages/vant/src/action-sheet/ActionSheet.tsx b/packages/vant/src/action-sheet/ActionSheet.tsx index ca3a0faa2..04a0b4c16 100644 --- a/packages/vant/src/action-sheet/ActionSheet.tsx +++ b/packages/vant/src/action-sheet/ActionSheet.tsx @@ -1,10 +1,11 @@ -import { nextTick, PropType, defineComponent } from 'vue'; +import { nextTick, defineComponent } from 'vue'; // Utils import { pick, extend, truthProp, + makeArrayProp, makeStringProp, createNamespace, } from '../utils'; @@ -40,7 +41,7 @@ export default defineComponent({ props: extend({}, popupSharedProps, { title: String, round: truthProp, - actions: Array as PropType, + actions: makeArrayProp(), closeIcon: makeStringProp('cross'), closeable: truthProp, cancelText: String, @@ -138,12 +139,6 @@ export default defineComponent({ } }; - const renderOptions = () => { - if (props.actions) { - return props.actions.map(renderOption); - } - }; - return () => ( - {renderOptions()} + {props.actions.map(renderOption)} {slots.default?.()} {renderCancel()} diff --git a/packages/vant/src/cascader/Cascader.tsx b/packages/vant/src/cascader/Cascader.tsx index 7cf757db3..0493a79b0 100644 --- a/packages/vant/src/cascader/Cascader.tsx +++ b/packages/vant/src/cascader/Cascader.tsx @@ -80,9 +80,7 @@ export default defineComponent({ options: CascaderOption[], value: string | number ): CascaderOption[] | undefined => { - for (let i = 0; i < options.length; i++) { - const option = options[i]; - + for (const option of options) { if (option[valueKey] === value) { return [option]; } diff --git a/packages/vant/src/image-preview/ImagePreview.tsx b/packages/vant/src/image-preview/ImagePreview.tsx index 45b38ff34..07416ebd2 100644 --- a/packages/vant/src/image-preview/ImagePreview.tsx +++ b/packages/vant/src/image-preview/ImagePreview.tsx @@ -38,6 +38,13 @@ import { ImagePreviewScaleEventParams } from './types'; const [name, bem] = createNamespace('image-preview'); +const popupProps = [ + 'show', + 'transition', + 'overlayStyle', + 'closeOnPopstate', +] as const; + const props = { show: Boolean, loop: truthProp, @@ -207,12 +214,7 @@ export default defineComponent({ overlayClass={bem('overlay')} onClosed={onClosed} onUpdate:show={updateShow} - {...pick(props, [ - 'show', - 'transition', - 'overlayStyle', - 'closeOnPopstate', - ])} + {...pick(props, popupProps)} > {renderClose()} {renderImages()} diff --git a/packages/vant/src/image/Image.tsx b/packages/vant/src/image/Image.tsx index ec8a3ccdd..cd444da70 100644 --- a/packages/vant/src/image/Image.tsx +++ b/packages/vant/src/image/Image.tsx @@ -1,5 +1,6 @@ import { ref, + Slot, watch, computed, PropType, @@ -94,31 +95,15 @@ export default defineComponent({ emit('error', event); }; - const renderLoadingIcon = () => { - if (slots.loading) { - return slots.loading(); + const renderIcon = (name: string, className: unknown, slot?: Slot) => { + if (slot) { + return slot(); } - return ( - ); - }; - - const renderErrorIcon = () => { - if (slots.error) { - return slots.error(); - } - - return ( - ); @@ -126,10 +111,18 @@ export default defineComponent({ const renderPlaceholder = () => { if (loading.value && props.showLoading) { - return
{renderLoadingIcon()}
; + return ( +
+ {renderIcon(props.loadingIcon, bem('loading-icon'), slots.loading)} +
+ ); } if (error.value && props.showError) { - return
{renderErrorIcon()}
; + return ( +
+ {renderIcon(props.errorIcon, bem('error-icon'), slots.error)} +
+ ); } }; diff --git a/packages/vant/src/index-bar/IndexBar.tsx b/packages/vant/src/index-bar/IndexBar.tsx index 4b99995ce..af20b05d5 100644 --- a/packages/vant/src/index-bar/IndexBar.tsx +++ b/packages/vant/src/index-bar/IndexBar.tsx @@ -100,16 +100,6 @@ export default defineComponent({ } }); - const getScrollerRect = () => { - if ('getBoundingClientRect' in scrollParent.value!) { - return useRect(scrollParent); - } - return { - top: 0, - left: 0, - }; - }; - const getActiveAnchor = ( scrollTop: number, rects: Array<{ top: number; height: number }> @@ -133,7 +123,7 @@ export default defineComponent({ const { sticky, indexList } = props; const scrollTop = getScrollTop(scrollParent.value!); - const scrollParentRect = getScrollerRect(); + const scrollParentRect = useRect(scrollParent); const rects = children.map((item) => item.getRect(scrollParent.value, scrollParentRect) diff --git a/packages/vant/src/toast/Toast.tsx b/packages/vant/src/toast/Toast.tsx index 988cbbf99..c7a4c3e50 100644 --- a/packages/vant/src/toast/Toast.tsx +++ b/packages/vant/src/toast/Toast.tsx @@ -9,6 +9,7 @@ import { // Utils import { + pick, isDef, unknownProp, numericProp, @@ -28,6 +29,15 @@ import type { ToastType, ToastPosition } from './types'; const [name, bem] = createNamespace('toast'); +const popupProps = [ + 'show', + 'overlay', + 'transition', + 'overlayClass', + 'overlayStyle', + 'closeOnClickOverlay', +] as const; + export default defineComponent({ name, @@ -128,20 +138,15 @@ export default defineComponent({ return () => ( {renderIcon()} {renderMessage()}