Проверка данных в БД после ввода номера телефона Tanstack query

Мне нужно реализовать проверку номера телефона в БД и зависимости от этого создавать нового пользователя или вносить изменения в существующего. С помощью tanstak query, react-hook-form, zod Не дает проверить данные после нажатия submit Выходит ошибка

Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons

import { zodResolver } from "@hookform/resolvers/zod"
import { useForm } from "react-hook-form"
import { z } from "zod"

import { Button } from "@/components/ui/button"
import {
  Form,
  FormControl,
  FormDescription,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "@/components/ui/form"
import { Input } from "@/components/ui/input"
import { useQuery } from "@tanstack/react-query"
import { ChildService } from "@/service/child.service"



export function TestForm() {
  const usePhoneNumber = (phone_number: string | undefined) => {
    return useQuery({
      queryFn: async () => await ChildService.get_by_phone_number(phone_number),
      queryKey: ["child_phone", phone_number],
      enabled: !!phone_number
    })
  }

  const formSchema = z.object({
    phone: z
      .string(),
  })

  const form = useForm<z.infer<typeof formSchema>>({
    resolver: zodResolver(formSchema),
    defaultValues: {
      phone: "",
    },
  })
  
  function onSubmit(values: z.infer<typeof formSchema>) {
    const phoneNumber = usePhoneNumber(values.phone)
    if (phoneNumber.isSuccess) {
      console.log(`Запускается мутация по добавлению к этому пользователю ${phoneNumber.data?.id}`)
    } else {
      console.log(`Создается новый пользователь ${values}`)
    }
  }

  return (
    <Form {...form}>
      <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
      <FormField
          control={form.control}
          name="phone"
          render={({ ...field }) => (
            <FormItem>
              <FormLabel>Телефон</FormLabel>
              <FormControl>
                <Input {...field} type="number" />
              </FormControl>
              <FormDescription>Введите номер телефона ребенка.</FormDescription>
              <FormMessage />
            </FormItem>
          )}
        />
        <Button type="submit">Submit</Button>
      </form>
    </Form>
  )
}

Ответы (1 шт):

Автор решения: 0px

Ты пытаешься вызвать useQuery внутри функции usePhoneNumber, который не является функциональным компонентом

Нужно вытащить из функции useQuery чтобы он вызывался непосредственно в компоненте TestForm

→ Ссылка