Comments (6)
The input would need to fire an onBlur event for the revalidate.
from react-hook-form.
But how? It feels very wrong to need to intercept onClick
on the submit button, blur, refocus and then submit… if that's even a possible solution to the problem
from react-hook-form.
maybe try to do a trigger on the submit button click?
from react-hook-form.
That doesn't seem to work either. The onClick doesn't seem to fire when there are errors:
const handleClick = () => {
console.log(Math.radom());
trigger();
handleSubmit(onSubmit)();
};
return (
<div className="App">
<form onSubmit={handleSubmit(onSubmit)}>
{errors?.firstName ? <p>Enter a valid name</p> : null}
<div>
<label htmlFor="firstName">First Name</label>
<input
{...register("firstName", {
required: true,
})}
/>
</div>
<input type="submit" onClick={handleClick} />
</form>
</div>
);
The random number gets logged on the first press which initially validates the form, but not on the 2nd.
Was that what you had in mind?
from react-hook-form.
yea that's what i have in mind, why it's not firing tho. it should as the onClick even there.
from react-hook-form.
Hi @bluebill1049,
If I understood correctly, you want the form to be submitted onBlur
if form is valid. This is not expected behavior of reValidationMode. However you can achieve this by using below code snippet.
import React from "react";
import ReactDOM from "react-dom";
import { useForm } from "react-hook-form";
import "./index.css";
function App() {
const { register, handleSubmit, formState } = useForm({
mode: "onSubmit",
reValidateMode: "onBlur",
});
const [blurState, setBlurState] = React.useState({})
const onSubmit = (data) => {
alert(JSON.stringify(data));
};
const { onBlur, ...registerProps } = register('firstName', { required: true });
const handBlurEvent = (e) => {
onBlur(e)
setBlurState(prevState => ({
...prevState,
"firstName": true
}))
};
const isValidState = blurState["firstName"] && !formState.isValidating && !formState.errors["firstName"]
React.useEffect(() => {
if(isValidState) {
handleSubmit(onSubmit)()
setBlurState(prevState => ({
...prevState,
"firstName": false
}))
}
}, [
isValidState,
onSubmit,
handleSubmit
])
return (
<div className="App">
<form onSubmit={handleSubmit(onSubmit)}>
{formState.errors && formState.errors.firstName ? (
<p>Enter a valid name</p>
) : null}
<div>
<label htmlFor="firstName">First Name</label>
<input
{...registerProps}
onBlur={handBlurEvent}
/>
</div>
<input type="submit" />
</form>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
from react-hook-form.
Related Issues (20)
- issue: Render loop when calling `getFieldState` HOT 3
- issue: Type generics do not work well with TS Unions HOT 3
- issue: combining isValid and isDirty in useEffect deps array fire the effect twice HOT 1
- Provide Validation Event Type to `resolver` Function
- issue: setError used with shouldFocus doesn't set the focus properly HOT 2
- issue: `setValue` won't set the value to an array on a nested input HOT 2
- FieldPathByValue not playing nice with PathValue
- issue: `deps` property in `RegisterOptions` should only accept field names
- issue: trigger function / register deps - trigger re-render even if formState isn't updated HOT 2
- issue: `Type instantiation is excessively deep and possibly` with recursive type HOT 2
- issue: Two useFieldArray instances are not able to modify the same array HOT 2
- Incorrect type inference for `UseFormHandleSubmit`
- issue: UseWatch not subscribing to array changes HOT 1
- issue: `isDirty` is always 'true' when the `reactStrictMode` property is enabled in the `next.config.js` config
- issue: setValue with shouldDirty on nested objected throws TypeError
- Validating array inputs based on another field from within the array
- Create reusable form section HOT 3
- issue: Form should not transition to 'isSubmitting' true unless validation has passed HOT 2
- issue: custom validate works onChange even though I set useForm({mode: 'onBlur'}).
- issue: FieldArray append with React Select not working correctly. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-hook-form.