Comments (6)
we have support for arrays, would be good to add a docs page for it though. If you create a schema with .array()
you can have array values:
const StringArraySchema = z.string().array();
function StringArrayField() {
const {field: {onChange, value}} = useTsController<string[]>();
}
const mapping = [
[StringArraySchema, StringArrayField]
] as const
At least add examples for:
- Dynamic text input array (allowing users to add and remove text fields)
Any other ideas of examples we'd like to see with arrays?
from react-ts-form.
Well, the case I was trying to implement is an array of objects (or, in other words, a table). So, no, not a string array. The schema looks roughly like this:
z.object({
data: z.object({
id: z.string(),
name: z.string(),
abbr: z.string(),
colour: z.string().nullable()
}).array()
})
(the top-level data
property is there because RHF doesn't support top-level arrays in useFieldArray
)
from react-ts-form.
you can do that as well:
const RowSchema = z.object({
id: z.string(),
name: z.string(),
abbr: z.string(),
colour: z.string().nullable()
});
const TableSchema = ObjectSchema.array();
function MyTable() {
const {field: {value, onChange}} = useTsController<z.infer<typeof TableSchema>>();
}
const mapping = [
[TableSchema, MyTable],
] as const;
TBH I haven't used useFieldArray
for dynamic inputs in the past, is there something that's not possible with the above approach that is possible with useFieldArray
?
I guess the main motivation would be to make it easier to manipulate the dynamic inputs with things like "remove", "swap", etc? That could be done manually in the library currently, I think, but might be worth thinking about adding support for react hook forms APIs to make it easier
from react-ts-form.
I see. Well, this approach makes me treat the row as a single value, which is not very ergonomic. I guess it's a different topic, but what I want, is for array and object type schemas to be associated with layout, and only ever use useTsController
with primitive values.
useFieldArray
is for DX, yes
from react-ts-form.
@Faithfinder Ah I had a typo in my code, should've been typeof TableSchema
which would make it so the value is an array of rows. I updated it, sry about that
from react-ts-form.
is for array and object type schemas to be associated with layout, and only ever use useTsController with primitive values.
if i understand you correctly this is now possible via the recursion feature #64
it might be a little more cleanly handled using this proposed FormFragment feature: #129
from react-ts-form.
Related Issues (20)
- issue: npm ERR Could not resolve dependency HOT 2
- actually parse with zod schema so we can get the .strip() behavior HOT 5
- Typesafe props not working for field that is nullable.optional or .nullish HOT 5
- Accessing the submitter element? (multiple submit buttons) HOT 2
- Improve z.array(z.enum([])) and z.enum([]).array() HOT 2
- New Functionality - useDateFieldInfo() HOT 2
- issue: custom field component for a type z.number().int() is ignored when I have z.number() present HOT 1
- Docs: edit this page takes me to 404
- issue: form does not get validated when submitting from parent HOT 2
- issue: error in Array schemas don't surface HOT 1
- add support for onChange HOT 1
- On the Fly adding additional fields to a form HOT 2
- issue: parse schema with createUniqueFieldSchema in Nextjs api route not working
- issue: Component props not passing down to nested objects
- issue: `useTsController` eats `onChange(undefined)` and does not bubble it
- Add support for ZodUnion
- issue: Example NumberField component can't get subsequently updated by the reset function if field is empty HOT 2
- Lower required version of React in peerDependencies HOT 1
- Unable to pass options to select field when inside of a complex field type such as an address. HOT 2
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-ts-form.