New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unable to setValue on hidden type inputs #284
Comments
Thanks for the detailed issue report. hmmm, that's strange. it should just work. Are you happy to provide a codesandbox, I will take a look this when I am in the office :) |
Sure thing! :-) There you are: https://codesandbox.io/embed/strange-margulis-p5geb?fontsize=14 So, you will have the same form components twice: once with a hidden and once with a text field as the backing field. Switch the toggle, press submit and see the console for the JSON generated by react-hook-forms. Thank you very much for your effort! |
thanks for the codesandbox :) really helpful i will look into this issue. |
looks like is the |
Oh, thanks! I was not aware of the watch() function. So, what is the actual rule for using watch()? Should it always be used in defaultValue? |
https://react-hook-form.com/api#watch you can watch any eg:
|
but this issue was weird, probably only to do with defaultValue with hidden input in React. |
going to close this issue for now :) feel free to reopen if you have other questions |
Hey @bluebill1049 I've encountered a similar issue with a child input used for file upload which is hidden, touched does not record the change unless I remove the hidden from input element. Any other gotchas? Does not work: This works: |
@thomascraig can you set a full codesandbox? are you using |
I am facing the same issue. Hidden fields don't seem to work correctly... |
Just chiming in here, I also have a hidden field where setting the value programmatically doesnt work. If I turn the field in to a normal text field it does. For me the solution was using the output of How are values on fields actually set? Could it be RHF is using an event that isnt supported on hidden fields? |
you can't update input hidden value: try with |
I'm not sure this is correct. I interpret MDN's docs as "the user cannot see or edit hidden inputs" -- not that you can't programmatically change hidden inputs to then submit to the server. For our Rails API, we often use dynamically updated hidden inputs to send flags like I'm currently running into this issue myself with some dynamic, deeply nested forms who's schema is generated by rails and rendered by RHF. When I want to delete an association, I need to set that const { register } = useForm({ resolver: yupResolver(myDynamicSchema) })
const objectsFromServer = {
nested_resources: [
{ id: 1, value: 123 }, { id: 2, value: 456 }
]
}
const deleteLastObject = () => {
setValue('nested_resources[1][_destroy]', true)
}
return <div>
{objectsFromServer.nested_resources.map((obj, idx) => (
<div>
{/* unregister and hide visible input for deleted object */}
{obj._destroy ? (
<i>Object deleted</i>
) : (
<input
ref={register}
name={`nested_resources[${idx}][value]`}
defaultValue={obj.value} />
)}
{/* hidden input must be present to send to server */}
<input
type="hidden"
ref={register}
name={`nested_resources[${idx}][_destroy]`}
defaultValue={obj._destroy} />
</div>
))}
<button onClick={deleteLastObject}>Delete</button>
</div> I know |
I think we can set hidden input value: https://codesandbox.io/s/misty-sea-41ko0?file=/src/App.js |
@bluebill1049 yes but then it resets on submit: https://codesandbox.io/s/ecstatic-satoshi-420w3?file=/src/App.js |
That's a valid issue, would you like to create a bug report on this? |
@bluebill1049 Sure thing! Thanks for the quick responses #2917 |
Hi,
Describe the bug
I use react-hook-form 3.23.0. I am not to be able to use setValue on type="hidden" input fields, while setValue works OK on default input fields.
To Reproduce
I have this simple component using semantic-ui-react.
Expected behavior
I want to use Semantic UI's Radio component visualized as a toggle. I would like to store the value of the toggle in a backing field (name="start"). When I have a type="hidden" as the backing field the value always remains "true" (clicking submit logs the form value and start is always "true" there). However if I remove type="hidden" and have a default text field then everything works fine and the value of "start" matches the state of the toggle.
Is there anything special in the handling of hidden inputs? Or what am I doing wrong?
Thanks!
The text was updated successfully, but these errors were encountered: