2023-08-02 react antd的时间框用法

需求图


import { Button, Form, Input, Select, Space, DatePicker, Checkbox } from 'antd';

import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';

import React from 'react';

const { RangePicker } = DatePicker;

const { Option } = Select;

const layout = {

  labelCol: { span: 8 },

  wrapperCol: { span: 16 },

};

const tailLayout = {

  wrapperCol: { offset: 8, span: 16 },

};

const initForm = {

  note: 'Hello world!',

  gender: 'male',

  timerList: [

    {

      timer: [],

      checkFlag: false

    }

  ]

}

const rules = {

  note: [{required: true}],

  gender: [{required: true}],

  customizeGender: [{required: true}],

  timerList: [{required: true}],

}

const App = () => {

  const [form] = Form.useForm();

  const onGenderChange = (value) => {

    switch (value) {

      case 'male':

        form.setFieldsValue({

          note: 'Hi, man!',

        });

        break;

      case 'female':

        form.setFieldsValue({

          note: 'Hi, lady!',

        });

        break;

      case 'other':

        form.setFieldsValue({

          note: 'Hi there!',

        });

        break;

      default:

    }

  };

  const onFinish = (values) => {

    console.log(values);

  };

  const onReset = () => {

    form.resetFields();

  };

  const onFill = () => {

    form.setFieldsValue(initForm);

  };

  const add = () => {

    const list = form.getFieldValue('timerList');

    form.setFieldsValue({

      timerList: [...list, { timer: [], checkFlag: false }]

    })

  }

  const remove = key => {

    const list = form.getFieldValue('timerList');

    form.setFieldsValue({

      timerList: list.filter((_, index) => index != key)

    })

  }

  const setCheck = () => {

    // 可以在这处理默认逻辑 比如你那设置时间啥的

    form.setFieldsValue(form.getFieldsValue(true))

  }

  return (

    <Form

      {...layout}

      form={form}

      name="control-hooks"

      onFinish={onFinish}

      style={{maxWidth: 600,}}

      initialValues={

        initForm

      }

    >

      <Form.Item name="note" label="Note" rules={rules.note}>

        <Input />

      </Form.Item>

      <Form.Item name="gender" label="Gender" rules={rules.gender}>

        <Select placeholder="Select a option and change input text above" onChange={onGenderChange} allowClear>

          <Option value="male">male</Option>

          <Option value="female">female</Option>

          <Option value="other">other</Option>

        </Select>

      </Form.Item>

      <Form.Item noStyle shouldUpdate={(prevValues, currentValues) => prevValues.gender !== currentValues.gender}>

        {({ getFieldValue }) =>

          getFieldValue('gender') === 'other' ? (

            <Form.Item name="customizeGender" label="Customize Gender" rules={rules.customizeGender}>

              <Input />

            </Form.Item>

          ) : null

        }

      </Form.Item>

      <Form.List name="timerList" >

        {(fields) => (

          <>

            {fields.map(({ key, name, ...restField }) => (

              <Space key={key} style={{ display: 'flex', marginBottom: 8 }} align="baseline">

                <Form.Item

                  {...restField}

                  name={[name, 'timer']}

                  rules={[{ required: true, message: 'Missing timer name' }]}

                >

                  <RangePicker />

                </Form.Item>

                <Form.Item

                  {...restField}

                  name={[name, 'checkFlag']}

                  valuePropName="checked"

                  rules={[{ required: true, message: 'Missing checkFlag name' }]}

                >

                  <Checkbox onChange={setCheck} disabled={form.getFieldValue('timerList').some(({ checkFlag }) => checkFlag == true )}>Checkbox</Checkbox>

                </Form.Item>

                <Button onClick={() => remove(key)}>删除</Button>

                <Button onClick={() => add()} block icon={<PlusOutlined />}>添加</Button>

              </Space>

            ))}

          </>

        )}

      </Form.List>

      <Form.Item {...tailLayout}>

        <Button type="primary" htmlType="submit"> Submit </Button>

        <Button htmlType="button" onClick={onReset}> Reset </Button>

        <Button type="link" htmlType="button" onClick={onFill}> Fill form </Button>

      </Form.Item>

    </Form>

  );

};

export default App;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容