Я использую компонент Form из Shadcn/ui, чтобы создать форму, которая также использует React-Hook-Form и Zod. В этой форме у меня есть кнопка Button 1 с всплывающей подсказкой Shadcn/ui. Идея заключается в том, что пользователь нажимает кнопку 1, и строка «Кнопка 1» сохраняется в форме. Вот код:
export default function JobForm() {
const formSchema = z.object({
jobName: z.string().min(1).max(50),
button: z.string().optional(),
});
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
jobName: "",
button: "",
},
});
function onSubmit(values: z.infer<typeof formSchema>) {
console.info(values);
}
return (
<div>
<Form {...form}>
<form onSubmit = {form.handleSubmit(onSubmit)} className = "space-y-8">
<FormField
control = {form.control}
name = "jobName"
render = {({ field }) => (
<FormItem>
<FormLabel>Job Name</FormLabel>
<FormControl>
<Input placeholder = "Input job name" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Controller
name = "button"
control = {form.control}
render = {({ field }) => (
<FormItem>
<FormLabel>Button</FormLabel>
<FormControl>
<TooltipProvider>
<Tooltip>
<TooltipTrigger>
<Button
type = "button"
className = "mr-2"
onClick = {() => form.setValue('button', "Button 1")}
>
Button 1
</Button>
</TooltipTrigger>
<TooltipContent>
<p>"This is Button 1"</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Button type = "submit">Submit</Button>
</form>
</Form>
</div>
);
}
Проблема в том, что нажатие Button 1 запускает проверку поля имени вакансии. Я хочу, чтобы кнопка отправки запускала проверку. Я думаю, что проблема вызвана всплывающей подсказкой, поскольку удаление всплывающей подсказки вокруг Button 1 решает проблему. Как я могу использовать компонент всплывающей подсказки Button 1, не вызывая проверки при нажатии?





Вам нужно включить asChild в ToolTipTrigger
<TooltipTrigger asChild> {/* Add asChild here */}
<Button
type = "button"
className = "mr-2"
onClick = {() => handleButtonClick('Button 1')}
>
Button 1
</Button>
</TooltipTrigger>
В документации ToolTipTrigger по умолчанию отображается как кнопка, поэтому щелчок по компоненту внутри ToolTipTrigger будет действовать как нажатие на кнопку, что, следовательно, вызывает проверку, если тип кнопки не установлен на button.