I am thrilled to share the release of Hookform-field, a package designed to enhance the form-handling experience in React applications. Built on top of the popular react-hook-form library, Hookform-field brings type safety, strong reusability, and ease of use to custom-form components. π
Features
- Type-safe: Ensure your forms are robust and free of type errors.
- Strongly reusable: Create reusable components that simplify your codebase.
- Easy to use: Streamline your form development process.
- Extends react-hook-form: Leverage all the incredible features of react-hook-form.
Overview
Hookform-field offers custom form components to manage inputs like text, number, file, and select dropdowns effortlessly. Our detailed documentation will guide you through setup and usage, making form management a breeze.
Installation
Get started quickly with npm, yarn, or pnpm:
# npm npm install hookform-field react-hook-form # yarn yarn add hookform-field react-hook-form # pnpm pnpm install hookform-field react-hook-form
Usage
Step 1: Define Your Custom Fields
Create custom form fields with the createField
function:
import React from "react"; import { createField } from "hookform-field"; const Field = createField({ text: (props) => <input type="text" {...props} />, number: (props) => <input type="number" {...props} />, file: (props) => <input type="file" {...props} />, select: (props) => ( <select {...props}> {props.options.map((option, index) => ( <option key={index} value={option.value}> {option.label} </option> ))} </select> ), }); export default Field;
Step 2: Create Your Form
Build your form using the Form
component:
import React from "react"; import { Form } from "hookform-field"; import Field from "@/components/form/field"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; const schema = z.object({ name: z.string(), amount: z.number(), avatar: z.any(), age: z.string(), }); const resolver = zodResolver(schema); const MyForm = () => ( <Form resolver={resolver} defaultValues={{ name: "Bob" }} onSubmit={(values) => console.log(values)}> <Field label="Name" component="text" name="name" /> <Field component="number" name="amount" /> <Field label="File" component="file" name="avatar" /> <Field component="select" name="age" options={[{ value: '1', label: '1' }, { value: '2', label: '2' }]} /> </Form> ); export default MyForm;
Step 3: Render Your Form
Render your form in your application:
import React from "react"; import ReactDOM from "react-dom"; import MyForm from "./MyForm"; const App = () => ( <div> <h1>My Custom Form</h1> <MyForm /> </div> ); ReactDOM.render(<App />, document.getElementById("root"));
Learn More
Visit our documentation site and check out our GitHub repo for more information and to get started today!
Top comments (0)