v1.2.0
Embrace the platform
This change is reverted in v1.2.2
One of the most critical changes in this release is the auto field value update implemented in #729. Conform now updates input value using the DOM api instead of relying on the key
to re-mount the inputs with the new defaultValue. It means:
- It is no longer required to pass the
key
(e.g.fields.title.key
) to the input elements unless you are rendering a list.
// Before: The minimum setup
<input key={field.title.key} name={fields.title.name} defaultValue={fields.title.defaultValue} />
// Now: the key props is no longer required
<input name={fields.title.name} defaultValue={fields.title.defaultValue} />
// Bonus: if the form is not rendered server side, or you don't mind the user experience before JS is loaded...
<input name={fields.title.name} />
- Helpers like getInputProps, getSelectProps or getTextareaProps are no longer spreading a
key
to the input element. If you were seeing the messageWarning: A props object containing a "key" prop is being spread into JSX
, it should be resolved now. - Outstanding issues caused by inputs being unmounted (e.g. #701 and #730) are now fixed
Pre-release
Thanks to pkg.pr.new, we are now releasing a preview version on every pull request (#742)
You will find a comment on the PR like this one from pkg.pr.new with each package name listed. If you expand the item, you will see a command to install the pre-release version. If you are not using pnpm, you can swap it with npm install, or just copy the package URL and replace the version in the package.json with it.
We are also shipping a pre-release version on every commit merged to main
in the format https://pkg.pr.new/@conform-to/package@commit
. For example, if you would like to install the pre-release version of @conform-to/dom
and @conform-to/zod
up to db63782, you can run:
npm install https://pkg.pr.new/@conform-to/dom@db63782
npm install https://pkg.pr.new/@conform-to/zod@db63782
Other Improvements
- Improved the types of
submission.payload
in #706. If you were using Remix with single fetch, the action results should no longer be in typenever
. Thanks @timvandam! - Fixed empty string default value support in #741. Previously, we suggested using
.default()
to set a fallback value. However,.default()
does not work as expected withz.string().default('')
. This issue has now been resolved, but keep in mind that the default value is still subject to validation errors. For more predictable results, we recommend using.transform(value => value ?? defaultValue)
instead. - Implement zod object coercion in #733. Conform should support nested fields with only checkboxes now.
- Added bigint coercion support with zod in #726. Thanks @lifeiscontent!
- Improved the types of the default value in #719. As
FormValue
should never benull
. Thanks @aaronadamsCA! - Added a multiple select example with shadcn-ui in #753. Thanks @pwli0755!
- Improved the shadcn-ui Switch Component example to use
control.value
in #721. Thanks @reborn2135! - Fixed typo in
parseWithYup.md
andFormProvider.md
in #708, #751. Thanks @uttk, @felixyeboah! - Improved the ja docs messages in #709, #710, #711, #712. Thanks @k70suK3-k06a7ash1!
- Explained the usage of allErrors with checkbox group in #735.
New Contributors
- @reborn2135 made their first contribution in #721
- @uttk made their first contribution in #708
- @felixyeboah made their first contribution in #751
- @k70suK3-k06a7ash1 made their first contribution in #709
- @pwli0755 made their first contribution in #753
- @timvandam made their first contribution in #706
Full Changelog: v1.1.5...v1.2.0