ZOD精炼不显示React-Hook-form中的可选阵列字段的错误

问题描述 投票:0回答:1

I'M使用ZOD与反应式钩形式使用,以验证必须提供两个字段(

warehouses
clusters
)中的至少一个形式。这两个字段都是字符串的可选阵列。我正在使用
.refine
来强制执行此逻辑,但是错误消息未显示为字段。

这里是我的Zod模式:

const schema = z.object({ warehouses: z.array(z.string()).optional(), clusters: z.array(z.string()).optional(), }) .refine((data) => (data.warehouses?.length ?? 0) > 0 || (data.clusters?.length ?? 0) > 0, { message: 'At least one warehouse or cluster must be provided', path: ['warehouses', 'clusters'], });
i'm使用来自React-Hook-Form的控制器的自定义FormField组件,但该字段未显示错误消息。问题不在我的自定义FormField中,而是在Zod模式及其错误处理程序中
我的形式是我的formfield组件:

<FormField form={form} label={'Warehouses'} name="warehouses" render={({ field, fieldState }) => ( <AutofillMultibox field={field} choices={['South', 'East', 'West'].map((e) => ({ label: e, value: e, }))} /> )} /> <FormField form={form} label={'Clusters'} name="clusters" render={({ field, fieldState }) => ( <AutofillMultibox field={field} choices={['South', 'East', 'West'].map((e) => ({ label: e, value: e, }))} /> )} />

Well,
reactjs typescript validation react-hook-form zod
1个回答
0
投票
仅在所有值都通过默认类型检查后起作用。我希望早些时候发生错误,就像对其他输入的“需要”验证一样。因此,我不得不停止使用完善,然后用以下方式替换它:

locations: z.discriminatedUnion('type', [
        z.object({
            type: z.literal('warehouses'),
            warehouses: z.array(z.string()).min(1, 'Choose at least 1 warehouse'),
            clusters: z.array(z.string()).default([]),
        }),
        z.object({
            type: z.literal('clusters'),
            clusters: z.array(z.string()).min(1, 'Choose at least 1 cluster'),
            warehouses: z.array(z.string()).default([]),
        }),
    ]),


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.