npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

react-hook-formify

v1.1.2

Published

A smart wrapper around react-hook-form + zustand

Readme

react-hook-formify

react-hook-formify is a lightweight utility that enhances react-hook-form with reusable form components, zustand integration for live state tracking, and a clean, declarative API.


✨ Features

  • 📦 Built on top of react-hook-form
  • ⚡️ Live form state syncing via zustand
  • 🧱 Reusable <Form /> and <Field /> components
  • 🛡️ TypeScript support out of the box
  • 🧠 Debounced form state updates

Usage

import { Form, Field } from 'react-hook-formify';
import { TextField,Select } from '@mui/material';

export const Login = () => {
    
  const handleSubmit = ({ values }) => {
      console.log(values)
  };

  return (
    <Form 
        name="loginForm"
        fields={[
            {   
                name: "role_id",
                required: true,
                type: (yup)=>yup.object().shape({
                    id:yup.number().required()
                }), // or type:"object"
                onSubmitValue: (obj) => obj.id
            },
            { 
                name: 'email',
                value: '',
                type:"string",
                required: true 
            },
            {   
                name: 'password',
                value: ''
            },
        ]}
        onSubmit={handleSubmit}
        enableStore={false} // default option is false
    >
      {({ 
            values,
            errors,
            setValue,
        // you can get all react-hook-form attributes
        }) => (
        <>
            <Field
                name="role_id"
                component={Select}
                // Select props
            />
            <Field
                name="email"
                component={TextField}
                // TextField props

            />
            <Field
                name="password"
                component={TextField}
                // TextField props

            />
          <button type="submit">Submit</button>
        </>
      )}
    </Form>
  );
};

Extra

You can access form values from any component using Zustand:

import {useFormStore} from 'react-hook-formify';

const {formData, setFormData} = useFormStore();

⏳ Debounced Form Updates

The form values are synced to Zustand with a built-in debounce of 300ms to avoid excessive renders.

Props

Form props

| Prop Name | Type | Default | Description | | ------------- | ------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------- | | name | string | "form" | Unique name used for internal form store identification. | | fields | Array<object> | [] | List of field definitions used for generating validation schema and initial values. | | onSubmit | (formData: { values, mutate, methods }) => void | – | Callback triggered on successful form submission. | | children | ReactNode or (context) => ReactNode | – | Either a static form layout or a render function with access to form methods, values, and errors. | | enableStore | boolean | false | If true, form values are synced to Zustand store in real-time. | | ref | React.Ref<HTMLFormElement> | – | Optional ref to access the form DOM element from a parent component. |

Fields props

| Field Name | Type | Description | | --------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | name | string | Field key used in form state. | | type | string or (yup: Yup) => Yup.Schema | Yup type or a custom schema function. E.g., "string", "email", or (yup) => yup.string().oneOf([...]). | | value | any | Initial value of the field. | | required | boolean or (values) => boolean | Can be a static boolean or dynamic function based on current form values. | | min | number | Minimum value or string length. | | max | number | Maximum value or string length. | | onSubmitValue | (value) => any | Transforms field value before it’s passed to onSubmit. |

👏 Acknowledgements

Built with ❤️ using: react-hook-form, zustand

📦 Installation

npm install react-hook-formify