Всплывающая подсказка Shadcn/ui вокруг кнопки вызывает проверку формы

Я использую компонент 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, не вызывая проверки при нажатии?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
618
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Другие вопросы по теме