From 3be46da387bc562b7d2a687323c362e2e9a4a184 Mon Sep 17 00:00:00 2001 From: zhujiruo Date: Fri, 25 Apr 2025 10:24:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(toast):=20=E8=A1=A5=E5=85=A8=20Toast=20?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=E9=85=8D=E7=BD=AE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 补全 Toast 组件的默认配置相关功能 - 更新相关类型定义和文档说明 --- packages/vantui/src/toast/README.md | 2 +- packages/vantui/src/toast/events.tsx | 19 +++++++++++++++++-- packages/vantui/src/toast/index.tsx | 12 +++++++++++- packages/vantui/types/toast.d.ts | 4 ++-- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/packages/vantui/src/toast/README.md b/packages/vantui/src/toast/README.md index 6432e90cf..7fea73206 100644 --- a/packages/vantui/src/toast/README.md +++ b/packages/vantui/src/toast/README.md @@ -77,7 +77,7 @@ Toast.show({ | fail | 展示失败提示 | _  (
    options:
      ¦ ToastProps
      ¦ string
  ) => any
_ | - | `true` | | clear | 关闭提示 | _  (
    options?: ToastProps
  ) => void
_ | - | `true` | | setDefaultOptions | 修改默认配置,对所有 Toast 生效。传入 type 可以修改指定类型的默认配置 | _  (
    options: ToastProps
  ) => void
_ | - | `true` | -| resetDefaultOptions | 重置默认配置,对所有 Toast 生效。传入 type 可以重置指定类型的默认配置 | _  (
    options: any
  ) => void
_ | - | `true` | +| resetDefaultOptions | 重置默认配置,对所有 Toast 生效。 | _  () => void
_ | - | `true` | | createOnlyToast | 获取唯一的 toast 组件,不需要手动设置 id 和 selector | _  () => FunctionComponent &
    toastProps
_ | - | `true` | ### 样式变量 diff --git a/packages/vantui/src/toast/events.tsx b/packages/vantui/src/toast/events.tsx index 5b3663b11..d5f930691 100644 --- a/packages/vantui/src/toast/events.tsx +++ b/packages/vantui/src/toast/events.tsx @@ -1,3 +1,4 @@ +import _assign from 'lodash/assign' import { ToastProps } from '../../types/toast' import VanOverlay from '../overlay/index' import { createExtraNode, ExtraNode } from '../wxs/extra-node' @@ -9,6 +10,20 @@ const defaultDuration = 2500 let timer: NodeJS.Timeout | null = null let hasMask = false +const defaultToastOptions: ToastProps = { + duration: 2500, +} + +let _defaultOptions = { ...defaultToastOptions } + +export function setDefaultOptions(options: ToastProps) { + _assign(_defaultOptions, options) +} + +export function resetDefaultOptions() { + _defaultOptions = { ...defaultToastOptions } +} + export function show_(options: ToastProps) { if (timer) { clearTimeout(timer) @@ -24,12 +39,12 @@ export function show_(options: ToastProps) { >, ) } - extraNode.renderNode?.() + extraNode.renderNode?.() if (options.duration !== 0) { timer = setTimeout(() => { clear() options?.onClose?.() - }, options.duration || defaultDuration) + }, options.duration || _defaultOptions?.duration || defaultDuration) } } diff --git a/packages/vantui/src/toast/index.tsx b/packages/vantui/src/toast/index.tsx index 313657b1d..cc2246bdf 100644 --- a/packages/vantui/src/toast/index.tsx +++ b/packages/vantui/src/toast/index.tsx @@ -1,6 +1,14 @@ import { ToastProps } from '../../types/toast' import { createOnlyToast } from './create-only-toast' -import { success, loading, fail, clear, show } from './events' +import { + success, + loading, + fail, + clear, + show, + setDefaultOptions, + resetDefaultOptions, +} from './events' // @ts-ignore // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -13,6 +21,8 @@ Toast.loading = loading Toast.fail = fail Toast.clear = clear Toast.show = show +Toast.setDefaultOptions = setDefaultOptions +Toast.resetDefaultOptions = resetDefaultOptions Toast.createOnlyToast = () => createOnlyToast(Toast) export { Toast } diff --git a/packages/vantui/types/toast.d.ts b/packages/vantui/types/toast.d.ts index 619311890..ddea961a4 100644 --- a/packages/vantui/types/toast.d.ts +++ b/packages/vantui/types/toast.d.ts @@ -89,9 +89,9 @@ export interface toastProps { */ setDefaultOptions: (options: ToastProps) => void /** - * @description 重置默认配置,对所有 Toast 生效。传入 type 可以重置指定类型的默认配置 + * @description 重置默认配置,对所有 Toast 生效。 */ - resetDefaultOptions: (options: any) => void + resetDefaultOptions: () => void /** * @description 获取唯一的toast组件,不需要手动设置id和selector */