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

如何在反应中使用 rsuite 从选择渲染器添加验证

如何解决如何在反应中使用 rsuite 从选择渲染器添加验证

  const [application,setApplication] = useState([])
  const [app,setApp] = useState([
    {
      id: null,code: null,name: null
    }
  ]);

useEffect(() => {
 let ignore = false;
   (async function load() {
    let response = await getAllData();
    if (!ignore) setApplication(response['data'])

 })()
 return () => ignore = true;
},[]);
     {
    
            label: (
              <div className="flex items-center">
                <label className="flex-1">Application</label>
                <div className="text-right">
                  <ButtonGroup>
                    <IconButton icon={<Icon icon="plus" />} onClick={() => appendApp()} />
                    <IconButton onClick={() => removeApp()} size="md" icon={<Icon icon="minus" />} style={{ display: app.length > 1 ? 'inline-block' : 'none' }} />
                  </ButtonGroup>
                </div>
              </div>
            ),name: 'applications',renderer: (data) => {
              const { control,register,errors } = useFormContext();
    
              return (
                <div className="flex flex-col w-full">
                  {
                    app.map((item,index) => (
                      <div key={index} className="flex flex-col pb-2 -items-center">
                        <div className="flex pb-2 w-full">
                          <SelectPicker
                            placeholder="Select Application"
                            data={application['data']}
                            labelKey="name"
                            valueKey="code"
                            style={{ width: '100%' }}
                            disabledItemValues={Array.isArray(control.getValues()['applications']) ? control.getValues()['applications'].map(x => x.id) : []}
                            onChange={(value) => control.setValue('applications',_setApp(value,index,'code'))}
                            value={control.getValues()['applications']?.code}
                          />
                        </div>
                      </div>
                    ))
                  }
                </div>
              )
            }

 const appendApp = () => {
    let i = 0;
    for (i = 0; i < noOfApp; i++) {
      setApp(arr => [...arr,{
        id: null,name: null,role: null
      }]);

      return app;
    }
  }

  const removeAppRole = () => {
    setApp([...app.slice(0,-1)]);
  }

  const _setApp = (value,idx,status) => {
    app[idx][status] = value;
    setApp(app);
    return app;
  }

如何在选择上添加验证?例如,当SELECT字段为空时,它应该验证需要选择。也例如当存在这样的现有数据时:

data = [{
 id: 1,name: 'IOS',code: 'ios'
}]

以及如何在选择字段上显示此数据?因为我有一个创建和编辑。 当我尝试编辑时,它不显示该值。

解决方法

我不使用寄存器,我更喜欢使用Controller,对于这些情况更实用,在react-hook-form的v7中,看这个例子:

我的选择组件:

import subprocess
with open('progress_temp.log','w') as fw:
    subprocess.run(["awk","{print FILENAME \" \" $0}","progress.log"],stdout=fw)

在其他组件中使用该组件:

import { ErrorMessage } from "@hookform/error-message";
import { IonItem,IonLabel,IonSelect,IonSelectOption } from "@ionic/react";
import { FunctionComponent } from "react";
import { Controller } from "react-hook-form";
import React from "react";

const Select: FunctionComponent<Props> = ({
  options,control,errors,defaultValue,name,label,rules
}) => {
  return (
    <>
      <IonItem className="mb-4">
        <IonLabel position="floating" color="primary">
          {label}
        </IonLabel>
        <Controller
          render={({ field: { onChange,onBlur,value } }) => (
            <IonSelect
              value={value}
              onIonChange={onChange}
              onIonBlur={onBlur}
              interface="action-sheet"
              className="mt-2"
            >
              {options ? options.map((opcion) => {
                return (
                  <IonSelectOption value={opcion.value} key={opcion.value}>
                    {opcion.label}
                  </IonSelectOption>
                );
              }):""}
            </IonSelect>
          )}
          control={control}
          name={name}
          defaultValue={defaultValue}
          rules={rules}
        />
      </IonItem>
      <ErrorMessage
        errors={errors}
        name={name}
        as={<div className="text-red-600 px-6" />}
      />
    </>
  );
};

export default Select;

在这种情况下,我使用 Ionic 作为 UI,但您可以使用 MaterialUI、ReactSuite 或其他框架,它们是相同的。

希望能帮到你,祝你好运。

编辑

存储库:Ionic React Select Form Hook 一个代码沙盒:Ionic React Select Form Hook

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?