随笔——时间跨度超过XXX的日期置灰不可选择(ant design-RangePicker)

13 篇文章 0 订阅
5 篇文章 0 订阅
**状态**
  const [validDateFlag, setValidDateFlag] = useImmer<boolean>(false);
  const [dates, setDates]: any = useState([]);
  const [hackValue, setHackValue]: any = useState();
  const [dateValue, setDateValue]: any = useState();
**方法**
  // 不可选的日期范围(时间跨度不能超过3年,超过3年的日期置灰不可选择)
  const handleDisabledDate = (current: any) => {
    if (!dates || dates.length === 0) {
      return false;
    }
    const tooLate = dates[0] && current.diff(dates[0], 'days') > 1095; // 3年
    const tooEarly = dates[1] && dates[1].diff(current, 'days') > 1095;
    return tooEarly || tooLate;
  };
  const onDateOpenChange = (open: any) => {
    if (open) {
      setHackValue([]);
      setDates([]);
    } else {
      setHackValue(undefined);
    }
  };
 **组件**
           <Form.Item label="有效期">
            <RangePicker
              className={validDateFlag ? 'tip_rangepicker' : ''}
              showTime
              format={formatTime}
              value={hackValue || dateValue}
              disabledDate={handleDisabledDate}
              onCalendarChange={val => setDates(val)}
              onOpenChange={onDateOpenChange}
              onChange={val => {
                setDateValue(val);
                !val && setValidDateFlag(() => true);
                val && setValidDateFlag(() => false);
              }}
            />
          </Form.Item>
          {validDateFlag && <div className="tip_date">有效期不能为空</div>} 
 **样式**
   .ant-picker {
    &.tip_rangepicker {
      border-color: #ff4d4f !important;
      &.ant-picker-focused {
        box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);
      }
    }
  }
  .tip_date {
    margin: -24px 0 2px 0;
    color: #ff4d4f;
  }          

样式部分:就是类似必须项的样式;
自定义这部分样式的原因:是因为如果在form.Item中添加name后,在其里面时,当值不能按照理想的方向改变时,遇到这种情况需要自己定义想要的样式,这次的这个设置不可选择日期等属性后发现没有按照想要的方向显示相应日期,就去掉name然后自己定义必填样式了。
在这里插入图片描述

有一个问题(待解决)是:上述
const [dates, setDates]: any = useState([]);
const [hackValue, setHackValue]: any = useState();
const [dateValue, setDateValue]: any = useState();
使用useImmer替换useState,方法中改变状态的方式也变为useImmer下改变状态的方式,但是在选择日期后没有日期显示是空的,所以就没有改变使用useImmer
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值