Não sei se alguem já comentou sobre, mas caso não tenham comentado... compartilho aqui 1 resolução possível de validação do formulário via javascript (mesmo com o atributo "noValidate").
Para tal, é necessário perceber que no "event" do próprio submit do formulário, são retornados os campos dentro de event.target.elements...
Sendo assim, podemos fazer uma função de validação do formulário como 1 todo dentro do useErrors:
function validaForm(event) {
let newErrors = {};
let validado = true;
for (let key in erros) {
if (typeof event.target.elements[key] === "undefined") continue;
const actualValue = event.target.elements[key].value;
newErrors[key] = validacoes[key](actualValue);
validado = validado ? newErrors[key].valido : validado;
}
setErros(newErrors);
return validado;
}
O hook completo pode ser visto nesse link: https://github.com/Antonio-bevilaqua/react-alura-formulario2/blob/main/src/hooks/useErros.js