reactjs - react Hook 形式 : how can i validate a group of radio buttons or checkboxes to ensure at least one is selected

标签 reactjs react-hook-form

我有一组复选框和一组 if radio ,我想使用 react Hook 表单进行验证,以确保在提交时未选择任何复选框时生成错误消息。

我曾尝试在他们的网站上使用表单生成器进行试验,但我无法弄清楚如何将一组项目作为单个验证单元进行验证。

<div>
  <span>Option A <input type="checkbox" value="A" /></span>
  <span>Option B <input type="checkbox" value="B" /></span>
  <span>Option C <input type="checkbox" value="C" /></span>
</div>
<...output a validation error if one or more checkboxes hasnt been checked within the group>
<div>
  <span>Option A <input type="radio" value="A" /></span>
  <span>Option B <input type="radio" value="B" /></span>
  <span>Option C <input type="radio" value="C" /></span>
</div>
<...output a validation error if one or more radios hasnt been checked within the group>

这可能吗?是否有正确的方法?

感谢您的时间和关注。

最佳答案

您将 react-hook-form 标记添加到您的问题中,但您的代码中没有任何相关内容。如果你确实在使用 React Hook Form,那么使用 schema validation 来完成你想要的事情是一种方法。通过 yup:

const schema = yup.object().shape({
  checkbox: yup.array().min(1),
  radio: yup.string().required(),
});

export default function App() {
  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm({
    resolver: yupResolver(schema),
  });
  const onSubmit = (data) => {
    alert(JSON.stringify(data));
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <span>
        Checkbox 1
        <input type="checkbox" {...register('checkbox')} value="A" />
      </span>
      <span>
        Checkbox 1
        <input type="checkbox" {...register('checkbox')} value="B" />
      </span>
      <span>
        Checkbox 3
        <input type="checkbox" {...register('checkbox')} value="C" />
      </span>
      <p style={{ color: 'red' }}>
        {errors.checkbox && 'At least one checkobox must be selected'}
      </p>
      <span>
        <label>Radio 1</label>
        <input type="radio" {...register('radio')} value="A" />
      </span>
      <span>
        <label>Radio 2</label>
        <input type="radio" {...register('radio')} value="B" />
      </span>
      <span>
        <label>Radio 3</label>
        <input type="radio" {...register('radio')} value="C" />
      </span>
      <p style={{ color: 'red' }}>{errors.radio && 'Radio is required'}</p>
      <input type="submit" />
    </form>
  );
}

查看工作 stackblitz .

请注意,由于单选按钮选项是排他性的(只能选择一个),您只是说该字段是必需的。

关于reactjs - react Hook 形式 : how can i validate a group of radio buttons or checkboxes to ensure at least one is selected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70988588/

相关文章:

javascript - React Hook Form - 智能组件 - 当输入被包装在元素中时表单被破坏

node.js - 无法安装 react 导航和手势

reactjs - 如何从Google Analytics(分析)中检索UTM源? - react

reactjs - 在空输入提交时显示值类型错误消息而不是必需的错误消息

javascript - React 钩子(Hook)形式 - 对话框内的字段数组( Material UI)

javascript - 从 Bootstrap 表单中进行多项选择 - React Hooks

ios - 扩展 RCTConvert 以提供自定义函数类型

reactjs - 使用 Jest 模拟 React 的 AJAX 请求

javascript - Promise.all 结果在操作成功之前触发

react-hook-form - 如何解析 Zod 来识别字段是否为必填字段?