React Native 如何在TextInput字段为空时显示错误消息?

bzzcjhmw  于 2023-05-23  发布在  React
关注(0)|答案(1)|浏览(220)

我目前正在react-native中开发一个移动的应用程序(实际上是在登录页面上)。
我想在TextInput字段为空时显示一条错误消息。
为此,我尝试使用@react-hook-form库
我 Package 我的TextInput到一个控制器,我设置了一个“规则”的“必需”和消息,我想打印,但它不工作...

<View>
  <Controller
    control={control}
    name="username"
    defaultValue=""
    rules={{
      required: { value: true, message: "Nom d'utilisateur nécessaire" },
    }}
    render={({ field: { onChange, value } }) => (
        
        <TextInput
          value={value}
          placeholder={'utilisateur'}
          autoFocus={true}
          onChangeText={(text: string) => {
            onChange(text);
            handleChangeText(text, 'login');
          }}
          onSubmitEditing={() => refPasswordInput.current?.focus()}
        />

    )}
  />

我到处都找过了,但什么也没找到。
先谢谢你了
[编辑]
这是第一个答案之后的更新组件:

<View>
  <Controller
    control={control}
    name="username"
    defaultValue=""
    rules={{
      required: { value: true, message: "Nom d'utilisateur nécessaire" },
    }}
    render={({ field: { onChange, value } }) => (
        
        <TextInput
          value={value}
          placeholder={'utilisateur'}
          autoFocus={true}
          onChangeText={(text: string) => {
            onChange(text);
            handleChangeText(text, 'login');
          }}
          onSubmitEditing={() => refPasswordInput.current?.focus()}
        />
       {errors.username && <Text>{errors.username.message}</Text>}
    )}
  />
</View>

这是我得到的屏幕:

zfciruhq

zfciruhq1#

为了显示来自React Hook Form的错误消息,您需要读取每个表单字段的错误对象,并将其显示在TextInput下。
在您的示例中,可以通过errors.username对象访问“username”字段错误。如果该字段有任何验证错误,它将有一个包含“message”字段的对象,其中包含错误消息。您可以在需要时使用它来显示错误。
以下是如何修改代码以显示错误消息:

import { useForm, Controller } from 'react-hook-form';
//...
const { control, handleSubmit, formState: { errors } } = useForm();

<View>
  <Controller
    control={control}
    name="username"
    defaultValue=""
    rules={{
      required: { value: true, message: "Nom d'utilisateur nécessaire" },
    }}
    render={({ field: { onChange, value } }) => (
      <>
        <TextInput
          value={value}
          placeholder={'utilisateur'}
          autoFocus={true}
          onChangeText={(text: string) => {
            onChange(text);
            handleChangeText(text, 'login');
          }}
          onSubmitEditing={() => refPasswordInput.current?.focus()}
        />
        {errors.username && <Text>{errors.username.message}</Text>}
      </>
    )}
  />
</View>

在上面的示例中,如果“用户名”字段有错误(如果由于您的规则而未填写,则会出现错误),它将在TextInput下方显示错误消息。此错误消息来自您为字段设置的规则。

相关问题