reactjs - 如何在zod中制作自定义错误消息?

标签 reactjs typescript forms react-hook-form zod

我正在尝试为 zod 验证编写自定义错误消息。

这是我的架构对象,我在错误消息中传递了它。

const schema: ZodType<FormData> = z.object({
    firstName: z.string().nonempty(),
    lastName: z.string().nonempty(),
    email: z.string().email().min(5).nonempty(),
    pin: z.string( { invalid_type_error: "Must contain 4 digitsss "}).nonempty().min(4, "Must be 4 digits").max(4, "Must be 4 digits").regex(pinPattern),
    phoneNumber: z.string().nonempty().min(11),
    password: z.string().min(8).regex(Passwordregex).nonempty(),
    confirmPassword: z.string().min(8).nonempty(),
  }).refine(data => data.password === data.confirmPassword, {
    message: "Passwords don't match",
    path: ['confirmPassword']
  })

enter image description here

我尝试了字符串替换方法,但没有得到我想要的结果。

 {errors.
<span className='text-xs font-medium text-[#DC2626]'>{errors.firstName.message?.replace('String', 'First Name')}</}

最佳答案

import { ZodError, ZodIssue } from 'zod'

const formatZodIssue = (issue: ZodIssue): string => {
    const { path, message } = issue
    const pathString = path.join('.')

    return `${pathString}: ${message}`
}

// Format the Zod error message with only the current error
export const formatZodError = (error: ZodError): string => {
    const { issues } = error

    if (issues.length) {
        const currentIssue = issues[0]

        return formatZodIssue(currentIssue)
    }
}

并将验证代码包装在 trycatch 语句中:

 try {
      ...your code here  
    } catch (error) {
        console.error(error)
        throw new Error(formatZodError(error))
    }

关于reactjs - 如何在zod中制作自定义错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75883100/

相关文章:

reactjs - 如何使用钩子(Hook)通过现有的 redux 操作获取数据?

javascript - Angular http 服务循环

javascript - 参数 '[controllerName]' 不是 NaNunction,在转换为 TypeScript 时未定义

javascript - AngularJS:一个 'partial form' 用于创建和更新文章

javascript - 当移动到 AngularJS 上的其他路由时,如何保留我的输入数据?

python - 动态添加表单字段到django表单

javascript - 如何清除 React.js 中的状态?

css - react JS : using `flexbox` to implement one div over another

javascript - 如何在 React Native + Redux 中使用 NavigationStateUtils 实现 Navigator.replace?

typescript - 如何在 Typescript 中编写单元测试?