salve man, boa tarde. parece q o problema ta na forma como você está definindo os valores padrao.
a lib do react-hook-form espera q os valores padroes, sejam um objeto simples q possam ser sincronizados com o estado inicial do form, e qnd vc tenta defini-los de forma assincrona, o estado inicial vira undefined, oq pode estar causando esse erro.
uma possivel soluçao seria buscar os dados da categoria fora do useForm e dps passar os valores retornados para os valores padroes.
por ex:
export default function CategoriaForm() {
const navigate = useNavigate();
const { id } = useParams();
const isNewCategoria = !id;
const formSchema = z.object({
id: z.string().nullable(),
categoria: z.string().min(2, {
message: "A categoria deve ter mais de 2 caracteres.",
}),
});
// define o estado inicial para os valores padroes do form
const [defaultValues, setDefaultValues] = useState({
id: null,
categoria: '',
});
// usa o useEffect para buscar os dados da categoria quando o componente é montado
useEffect(() => {
// verifica se é uma nova categoria
if (!isNewCategoria) {
// busca os dados da categoria
categoriaService.buscar(id).then(res => {
// atualiza os valores padrão com os dados da categoria
setDefaultValues({
id: res.data.id,
categoria: res.data.categoria,
});
});
}
}, [id, isNewCategoria]);
// inicializa o form com os valores padroes e o schema da validação
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues,
});
}
dessa forma q pensei, to usando o state e o useEffect pra buscar os dados da categoria e definir eles no defaultValues antes de ser chamado o useForm, pra garantir q os valores padroes sejam definidos antes do form ser renderizado