• antd form表单自定义验证


     antd 4 

    import React, { useState } from 'react';
    import { Form, Input, Select, Button } from 'antd';
    
    const { Option } = Select;
    
    type Currency = 'rmb' | 'dollar';
    
    interface PriceValue {
      number?: number;
      currency?: Currency;
    }
    
    interface PriceInputProps {
      value?: PriceValue;
      onChange?: (value: PriceValue) => void;
    }
    
    const PriceInput: React.FC<PriceInputProps> = ({ value = {}, onChange }) => {
      const [number, setNumber] = useState(0);
      const [currency, setCurrency] = useState<Currency>('rmb');
    
      const triggerChange = (changedValue: { number?: number; currency?: Currency }) => {
        onChange?.({ number, currency, ...value, ...changedValue });
      };
    
      const onNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {
        const newNumber = parseInt(e.target.value || '0', 10);
        if (Number.isNaN(number)) {
          return;
        }
        if (!('number' in value)) {
          setNumber(newNumber);
        }
        triggerChange({ number: newNumber });
      };
    
      const onCurrencyChange = (newCurrency: Currency) => {
        if (!('currency' in value)) {
          setCurrency(newCurrency);
        }
        triggerChange({ currency: newCurrency });
      };
    
      return (
        <span>
          <Input
            type="text"
            value={value.number || number}
            onChange={onNumberChange}
            style={{  100 }}
          />
          <Select
            value={value.currency || currency}
            style={{  80, margin: '0 8px' }}
            onChange={onCurrencyChange}
          >
            <Option value="rmb">RMB</Option>
            <Option value="dollar">Dollar</Option>
          </Select>
        </span>
      );
    };
    
    const Demo = () => {
      const onFinish = (values: any) => {
        console.log('Received values from form: ', values);
      };
    
      const checkPrice = (_: any, value: { number: number }) => {
        if (value.number > 0) {
          return Promise.resolve();
        }
        return Promise.reject(new Error('Price must be greater than zero!'));
      };
    
      return (
        <Form
          name="customized_form_controls"
          layout="inline"
          onFinish={onFinish}
          initialValues={{
            price: {
              number: 0,
              currency: 'rmb',
            },
          }}
        >
          <Form.Item name="price" label="Price" rules={[{ validator: checkPrice }]}>
            <PriceInput />
          </Form.Item>
          <Form.Item>
            <Button type="primary" htmlType="submit">
              Submit
            </Button>
          </Form.Item>
        </Form>
      );
    };
    
    ReactDOM.render(<Demo />, mountNode);
  • 相关阅读:
    将程序集从GAC中导出
    客户端访问WebService复杂参数类型的使用和参数的序列化与反序列化
    (译Workflow in the 2007 Microsoft Office System)介绍(部分)
    处理PageRequestManager事件
    测试 IPersonalizable接口
    几篇很好的文章
    交换两个数,不引入第三个变量
    Dijkstra算法
    给定一个整数,求它的二进制表示中有多少个1。
    自律
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/15943893.html
Copyright © 2020-2023  润新知