useField

Creates a reactive field store of a specific field within a form store.

const field = useField<TSchema, TFieldPath>(form, config);

Generics

Parameters

Explanation

With useField you create a reactive field store for a specific field path within your form. The field store provides reactive access to the field's input value, validation errors, touched state, and more. It also includes a props object that you can spread onto React Native's TextInput component to automatically handle user interactions like focus, blur, and text change events.

The props object contains exactly a ref callback and onFocus, onBlur and onChangeText handlers. The ref callback registers the underlying native component instance, which enables methods like focus to control it. Since props does not set the input value, text inputs are controlled and you always pass value={field.input}. For non-text components such as Switch, set the value with the field store's onChange method instead.

Returns

Examples

The following examples show how useField can be used.

Text field

import { useField, useForm } from '@formisch/react-native';
import { Text, TextInput, View } from 'react-native';
import * as v from 'valibot';

const LoginSchema = v.object({
  email: v.pipe(v.string(), v.email()),
});

export default function LoginScreen() {
  const loginForm = useForm({ schema: LoginSchema });
  const field = useField(loginForm, { path: ['email'] });

  return (
    <View>
      <TextInput {...field.props} value={field.input} />
      {field.errors && <Text>{field.errors[0]}</Text>}
    </View>
  );
}

Non-text components

import { useField, useForm } from '@formisch/react-native';
import { Switch } from 'react-native';
import * as v from 'valibot';

const SettingsSchema = v.object({
  notifications: v.optional(v.boolean(), false),
});

export default function SettingsScreen() {
  const settingsForm = useForm({ schema: SettingsSchema });
  const field = useField(settingsForm, { path: ['notifications'] });

  return <Switch value={field.input} onValueChange={field.onChange} />;
}

The following APIs can be combined with useField.

Hooks

Components

Methods

Contributors

Thanks to all the contributors who helped make this page better!

  • GitHub profile picture of @fabian-hiller

Partners

Thanks to our partners who support the project ideally and financially.

Sponsors

Thanks to our GitHub sponsors who support the project financially.

  • GitHub profile picture of @vasilii-kovalev
  • GitHub profile picture of @UpwayShop
  • GitHub profile picture of @ruiaraujo012
  • GitHub profile picture of @hyunbinseo
  • GitHub profile picture of @nickytonline
  • GitHub profile picture of @kibertoad
  • GitHub profile picture of @caegdeveloper
  • GitHub profile picture of @Thanaen
  • GitHub profile picture of @bmoyroud
  • GitHub profile picture of @ysknsid25
  • GitHub profile picture of @dslatkin