微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 React Hook Form v7 中使用单选按钮?

如何解决如何在 React Hook Form v7 中使用单选按钮?

我正在开发一个 Ionic React 应用程序,我想使用 React Hook Form 和 Yup Resolvers 来提交表单。我的表单包含一个单选按钮和两个其他输入。

我在使用单选按钮时遇到了困难。我应该如何编写它以存储其值并提交? 您可以在下面找到我的组件。即使我选择了其中一个单选按钮,也不会存储任何值。

import { yupResolver } from "@hookform/resolvers/yup";
import * as yup from "yup";

const validationSchema = yup.object().shape({
  firstName: yup.string().required("First name is required"),lastName: yup.string().required("Last name is required"),});

const AddUser = () => {

  const history = useHistory();
  const [type,seType] = useState("");
  const [firstName,setFirstName] = useState("");
  const [lastName,setLastName] = useState("");
 
const {
    register,handleSubmit,formState: { errors },getValues,} = useForm({
    mode: "onChange",resolver: yupResolver(validationSchema),});

  const onSubmit= () => {
   
    var data = {
            type: getValues("type"),firstName: getValues("firstName"),lastName: getValues("lastName"),};

    axios
      .post("/add-user",data)
      .then((response) => {
        return response.data;
      })
      .catch((error) => {
        setMessage(
          `You are already registered`    
        );
        setIserror(true);
       
      });
  };

  return (
    <React.Fragment>
   
      <IonPage className="ion-page" id="main-content">
     
        <IonContent className="ion-padding">
          <div>
            <h2>Add New User</h2>
            
            <form onSubmit={handleSubmit(onSubmit)}>
              
              <IonList>
                <IonRadioGroup
                 {...register("type")}
                >
                  <IonItem>
                    <IonLabel>Type 2</IonLabel>
                    <IonRadio value="2" slot="start" />
                  </IonItem>

                  <IonItem>
                    <IonLabel>Type 4</IonLabel>
                    <IonRadio slot="start" value="4" />
                  </IonItem>

                  <IonItem>
                    <IonLabel>Type 6</IonLabel>
                    <IonRadio slot="start" value="6" />
                  </IonItem>
                </IonRadioGroup>
              </IonList>
               
               <IonItem>
                <IonLabel position="floating">First name*</IonLabel>
                <IonInput
                {...register("firstName")}
                ></IonInput>
              </IonItem>

 
              <IonItem>
                <IonLabel position="floating">Last name*</IonLabel>
                <IonInput
                {...register("lastName")}
                ></IonInput>
              </IonItem>

              <br />
              <IonButton
                type='submit'
              >
                create
              </IonButton>
            </form>
          </div>
        </IonContent>
      </IonPage>
    </React.Fragment>
  );
};

export default AddUser;

package.json

"@hookform/resolvers": "^2.4.0","react-hook-form": "^7.1.1","yup": "^0.32.9"

任何帮助将不胜感激!

解决方法

您需要使用 Controller 而不是 register 来包装 <IonRadioGroup>,因为 register 仅适用于简单的离子组件,例如 <IonInput />

<Controller
  control={control}
  name="type"
  render={({ field: { onChange,value } }) => (
    <IonList>
      <IonRadioGroup
        value={value}
        onIonChange={({ detail: { value } }) => onChange(value)}
      >
        <IonItem>
          <IonLabel>Type 2</IonLabel>
          <IonRadio value="2" slot="start" />
        </IonItem>
        <IonItem>
          <IonLabel>Type 4</IonLabel>
          <IonRadio slot="start" value="4" />
        </IonItem>
        <IonItem>
          <IonLabel>Type 6</IonLabel>
          <IonRadio slot="start" value="6" />
        </IonItem>
      </IonRadioGroup>
    </IonList>
  )}
/>

Edit React Hook Form - Ionic Radio Group

我还删除了 getValues 方法中的 onSubmit 调用,因为此函数的第一个参数已经提供了所有注册的表单值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?