我正在使用 Sveltekit、sveltekit-superforms、drizzle、zod 模式开发一个表单,以便能够执行表单的服务器端检查,问题在于执行检查后,在尝试将消息发送回在客户端中,消息的值似乎始终是未定义的,尽管我正在发送带有参数设置的消息,但我不明白为什么它不起作用。这是服务器端代码:
export const load = (async () => {
return {
formData: await superValidate(ZodSchema)
};
}) satisfies PageServerLoad;
export const actions: Actions = {
submitCheckout: async ({ request }) => {
// Validate the form
const formData = await superValidate<typeof ZodSchema, AlertMessageType>(
request,
ZodSchema
);
// Check if form is valid
if (formData.valid === false) {
return message(formData, {
alertType: 'error',
alertText: INVALID_FORM_DATA_ERROR
});
}
...
return message(formData, {
alertType: 'success',
alertText: SUCCESS_MESSAGE
});
}
};
虽然这是客户端:
const { enhance, form, errors, message } = superForm(data.props.formData, {
resetForm: true,
taintedMessage: null,
validators: ZodSchema,
onUpdate: () => {
isProcessing = false;
if (!$message) return;
const { alertType, alertText } = $message;
if (alertType === 'error') {
toast.error(alertText);
}
if (alertType === 'success') {
toast.success(alertText);
}
}
});
这是AlertMessage的类型:
export type AlertMessageType = {
alertType: 'success' | 'error' | 'warning' | 'info';
alertText: string;
};
这里必须使用
message
,因为你需要提交后的值:
superForm(data.form.data, {
...
onUpdated: ({ message }) => {
...
}
});