我有一个表格,这是动态建立使用ionic react 和YUP用于验证,这是基于来自API的信息,但我有一个问题,如果我没有 Select 一个单选按钮,当我按下提交时,单选按钮变得无法点击,这意味着我永远不能得到错误.

我在这里创建了一个使用硬编码的表单而不是动态填充的示例,如果您在不执行任何操作的情况下单击保存,则您将无法 Select 单选按钮,但我无法解决我的问题的来源.

Link to example of my issue

编辑:

以下是不起作用的代码的主要部分:

import React, { useEffect } from "react";
import { Controller, useForm } from "react-hook-form";
import * as yup from "yup";
import { yupResolver } from "@hookform/resolvers/yup";
import {
  IonList,
  IonRadioGroup,
  IonItem,
  IonLabel,
  IonRadio,
  IonButton,
  IonContent,
  IonPage,
  setupIonicReact,
  IonInput
} from "@ionic/react";

/* Core CSS required for Ionic components to work properly */
import "@ionic/react/css/core.css";

/* Basic CSS for apps built with Ionic */
import "@ionic/react/css/normalize.css";
import "@ionic/react/css/structure.css";
import "@ionic/react/css/typography.css";

/* Optional CSS utils that can be commented out */
import "@ionic/react/css/padding.css";
import "@ionic/react/css/float-elements.css";
import "@ionic/react/css/text-alignment.css";
import "@ionic/react/css/text-transformation.css";
import "@ionic/react/css/flex-utils.css";
import "@ionic/react/css/display.css";

/* Theme variables */
import "./theme/variables.css";
setupIonicReact();

const validationSchema = yup.object().shape({
  q7: yup.string().required("selection is required")
});

export default function App() {
  const {
    register,
    reset,
    getValues,
    handleSubmit,
    control,
    formState: { errors }
  } = useForm({
    resolver: yupResolver(validationSchema),
    mode: "all"
  });

  const onSubmit = (data: any) => {
    console.log(data);
  };

  // useEffect(() => {
  //   reset({
  //     // q7: "6"
  //   });
  // }, [reset]);

  return (
    <React.Fragment>
      <IonPage className="xion-page" id="main-cntent">
        <IonContent className="ion-padding">
          <div className="App">
            <form onSubmit={handleSubmit(onSubmit)}>
              <>
                values:{getValues("name")}
                <IonInput {...register("name")}></IonInput>
                error:{errors["q7"]?.message}
                values:{getValues("q7")}
                <Controller
                  control={control}
                  name="q7"
                  render={({ field: { onChange, value, ref } }) => (
                    <>
                      {console.log(value)}
                      <IonList>
                        <IonRadioGroup
                          ref={ref}
                          defaultValue=""
                          // allowEmptySelection={true}
                          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>
                    </>
                  )}
                />
                <br />
                <IonButton type="submit">Save</IonButton>
              </>
            </form>
          </div>
        </IonContent>
      </IonPage>
    </React.Fragment>
  );
}

推荐答案

您的问题是应该传入onChange函数js事件. 在具有自定义属性的onIonChange修改事件中. 但是您实际上向函数传递了一个值,而不是一个事件.

您可以在docks中找到onIonChange或setValue中的标准js事件

 <IonRadioGroup
    {...field}
    onIonChange={
    (event) => {
       setValue('q7', event.detail.value)
      }
    }
 >

https://codesandbox.io/s/crimson-breeze-d9fptl?file=/src/App.tsx:2253-2591

Reactjs相关问答推荐

如何在react组件中使用formik进行验证

根据另一个Select中的选定值更改Select中的值

生成Reaction Vite应用程序的停靠容器时无法识别环境变量

使用experial_useFormState将参数传递给服务器操作

React useEffect 问题...异步函数内的变量正在获取延迟的更新值

生产部署:控制台中 Firebase 无效 api 密钥错误

无法通过 fetch 获取数据到上下文中

在reduce()方法上得到NaN

是的验证:使用 useFieldArray 访问表单值

在react的useEffect钩子中,我的函数被调用,但只有第一个函数能够改变状态,第二个函数无法改变状态.

useRef.current.value 为空值

无法读取未定义的属性(读取值)...TypeError:无法读取未定义的属性(读取值)

如何在屏幕上使用相同的可重用

臭名昭著的测试未包含在 act(...) 中

Formik onChange() 字段挂钩覆盖显示值和 Select 机制

Cypress ,重试不再附加到 DOM 的元素

.filter() 函数在删除函数中创建循环 - React

将 dict 值转换并插入到react 钩子的列表中

react 路由路由加载器不适用于嵌套组件

如何防止 mui x-date-picker 被截断?