反应语义日期选择器禁用选择过去的日期

如何解决反应语义日期选择器禁用选择过去的日期

我正在使用react-semantic-ui-datepickers将日期选择为表单,同时也使用Formik和Yup进行验证。

是否可以禁用过去的日期,以便用户只能选择从今天开始的日期?

这是代码

import React from 'react';
import { connect } from 'react-redux';
import * as Yup from 'yup';
import Icon from 'semantic-ui-react/dist/commonjs/elements/Icon';
import { Formik,Form,Field } from 'formik';
import { Button,Modal,Input,Label } from 'semantic-ui-react';
import SemanticDatepicker from 'react-semantic-ui-datepickers';
import { Creators } from '../../../actions';
import './CodeForm.scss';

export default class CodeForm extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      open: false,};
  }

  onopen = () => {
    this.setState({ open: true });
  };

  closeModal = () => {
    this.setState({ open: false });
  };

  handleSubmit = values => {
    const { companyId,groupId } = this.props;
    if (companyId) {
      // create corporate code
      const { createCorporateCode,getCorporateCodes,getCompany } = this.props;
      createCorporateCode(values,companyId);
      this.setState({ open: false });
      getCompany(companyId);
      getCorporateCodes();
    } else if (groupId) {
      // add coupon
      const { createCorporateCode,getGroup } = this.props;
      createCorporateCode(values,groupId);
      this.setState({ open: false });
      getGroup(groupId);
      getCorporateCodes();
    } else {
      // create promo code
      const { createCode,getCodes } = this.props;
      createCode(values);
      this.setState({ open: false });
      getCodes();
    }
  };

  render() {
    const { trigger,companyId,groupId } = this.props;
    let title = 'CREATE PROMO CODE';
    if (companyId || groupId) {
      title = 'ADD COUPON';
    }

    const { open } = this.state;
    const initialValues = {
      name: '',expirationDate: '',};
    const requiredErrorMessage = 'This field is required';
    const dateErrorMessage = 'Please select a valid date';
    const validationSchema = Yup.object({
      name: Yup.string().required(requiredErrorMessage),expirationDate: Yup.date()
        .typeError(dateErrorMessage)
        .required(requiredErrorMessage),});
    return (
      <Modal
        open={open}
        trigger={trigger}
        onopen={this.onopen}
        onClose={this.closeModal}
        closeIcon={
          <Icon
            className="modal-close-icon"
            circular
            name="close"
            size="tiny"
          />
        }
        size="small">
        <Modal.Header>{title}</Modal.Header>
        <Modal.Content>
          <Formik
            initialValues={initialValues}
            validationSchema={validationSchema}
            onSubmit={values => this.handleSubmit(values)}>
            {({ values,errors,touched,setFieldValue }) => (
              <Form>
                <Label>Name</Label>
                <Field name="name" as={Input} placeholder="Add code name" />
                <div>{touched.name && errors.name ? errors.name : null}</div>
                <Label>Expiration date</Label>
                <SemanticDatepicker
                  name="expirationDate"
                  placeholder="Set expiration date"
                  onChange={(e,{ name,value }) => setFieldValue(name,value)}
                />
                <div>
                  {touched.expirationDate && errors.expirationDate
                    ? errors.expirationDate
                    : null}
                </div>
                <Button type="submit">Create code</Button>
              </Form>
            )}
          </Formik>
        </Modal.Content>
      </Modal>
    );
  }
}

我已经阅读了文档,但是没有找到任何关于此的信息。可以禁用过去的日期吗?

解决方法

我认为filterDate道具可以解决问题(docs)。

<SemanticDatepicker
  filterDate={(date) => {
    const now = new Date();
    return date >= now;
  }}
  name="expirationDate"
  placeholder="Set expiration date"
  onChange={(e,{ name,value }) => setFieldValue(name,value)}
/>

我对dateA > dateB计算的工作方式并不完全满意。您可能需要更细化并仅比较月,日,年。

@Hrishi建议的minDate道具也可以达到目的。

,

您可以通过“ minDate”作为道具

,
<SemanticDatepicker
     name="expirationDate"
     placeholder="Set expiration date"
     onChange={(e,value)}
     minDate={new Date()}
/>

minDate属性使用户可以从今天开始选择日期。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?