react16+antd4 RangePicker组件实现时间禁选示例

 更新时间:2023年05月31日 08:51:39   作者:灰太狼的情与殇  
这篇文章主要为大家介绍了react16+antd4 RangePicker 时间禁选示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

开发环境 react16+antd4

电脑系统 windows11专业版

分享一下 react+antd RangePicker组件的时间禁选,废话不多说

代码

const [dateType, setdataType] = useState([
    {
        value: '按日',
        key: 1
    },
    {
        value: '按月',
        key: 2
    }
]);
const [dateTime, setDateTime] = useState([
    moment().add(-1, 'years').add(0, "months").format("YYYY-MM"),
    moment().format("YYYY-MM"),
]);
const [timeValue, setTimeValue] = useState([
    moment(moment().add(-1, 'years').add(0, "months"), 'YYYY-MM'),
    moment(moment(), 'YYYY-MM')
]);
const [timeFormat, setTimeFormat] = useState('YYYY-MM');
const [pickerValue, setPickerValue] = useState('month');
const getDay = () => {
        setDateTime([
            moment().add(-1, "months").format("YYYY-MM-DD"),
            moment().format("YYYY-MM-DD"),
        ]);
        setTimeValue([
            moment(moment().add(-1, "months"), 'YYYY-MM-DD'),
            moment(moment(), 'YYYY-MM-DD')
        ]);
        setTimeFormat('YYYY-MM-DD');
        setPickerValue('date');
    };
    const getMonth = () => {
        setDateTime([
            moment().add(-1, 'years').add(0, "months").format("YYYY-MM"),
            moment().format("YYYY-MM"),
        ]);
        setTimeValue([
            moment().add(-1, 'years').add(0, "months"),
            moment(moment(), 'YYYY-MM')
        ]);
        setTimeFormat('YYYY-MM');
        setPickerValue('month');
    }
    // 时间类型 变化
    const TimeTypeChange = (value, option) => {
        setdateTypeValue(value);
        switch (+value) {
            case 1://按日
                getDay();
                break;
            case 2://按月
                getMonth();
                break;
        }
    }
    const timeDisabled = (current) => {
        switch (+dateTypeValue) {
            case 1:// 按日
                return day_disabledDate(current);
                break;
            case 2:// 按月
                return month_disabledDate(current);
                break;
        }
    }
    const month_disabledDate = (current) => {
        if (!timeValue) {
            return false;
        }
        const tooLate = timeValue[0] && current.diff(timeValue[0], 'months') > 11;
        const tooEarly = timeValue[1] && timeValue[1].diff(current, 'months') > 11;
        return !!tooEarly || !!tooLate;
    };
    const day_disabledDate = (current) => {
        if (!timeValue) {
            return false;
        }
        const tooLate = timeValue[0] && current.diff(timeValue[0], 'months') > 0;
        const tooEarly = timeValue[1] && timeValue[1].diff(current, 'months') > 0;
        const disable_day = current && current < moment().endOf('day');
        return !!tooEarly || !!tooLate || !disable_day;
    }
    const onOpenChange = (open) => {
        if (open) {
            setTimeValue([null, null]);
        }
    };
    const _onRangePickerChange = (date, dateString) => {
        // setTimeValue(dateString);
        setTimeValue(date);
        setDateTime(dateString);
    }
    const onCalendarChange = (value) => {
        setTimeValue(value);
    }
<Select placeholder='请选择时间类型'
    value={dateTypeValue == 1 ? '按日' : '按月'}
    onChange={TimeTypeChange}
    getPopupContainer={triggerNode => triggerNode.parentElement}>
    {dateType && dateType.map((item) => {
        return (
            <Option key={item.key} value={item.key}>{item.value}</Option>
        )
    })}
</Select>
<RangePicker
    style={{ width: 330, marginLeft: 5 }}
    value={timeValue}
    format={timeFormat}
    allowClear={false}
    disabledDate={timeDisabled}
    picker={pickerValue}
    onChange={_onRangePickerChange}
    onOpenChange={onOpenChange}
    onCalendarChange={onCalendarChange}
/>

效果如下

// 默认 显示按月

 // 选择按日禁选 效果

 // 按月禁选

 // 按日禁选

本期的分享到了这里就结束啦,希望对你有所帮助,让我们一起努力走向巅峰,更多关于react16 antd4 RangePicker的资料请关注脚本之家其它相关文章!

相关文章

  • Express+React+Antd实现上传功能(前端和后端)

    Express+React+Antd实现上传功能(前端和后端)

    这篇文章主要介绍了Express+React+Antd实现上传功能(前端和后端),本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • React JSX深入浅出理解

    React JSX深入浅出理解

    React使用JSX来替代常规的JavaScript。JSX是一个看起来很像 XML的JavaScript语法扩展。我们不需要一定使用 JSX,但它有以下优点:JSX执行更快,因为它在编译为JavaScript代码后进行了优化。它是类型安全的,在编译过程中就能发现错误。使用JSX编写模板更加简单快速
    2022-12-12
  • React Native预设占位placeholder的使用

    React Native预设占位placeholder的使用

    本篇文章主要介绍了React Native预设占位placeholder的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • flouting ui定位组件完美替代ant deisgn使用详解

    flouting ui定位组件完美替代ant deisgn使用详解

    这篇文章主要为大家介绍了flouting ui定位组件完美替代ant deisgn使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • react-native 圆弧拖动进度条实现的示例代码

    react-native 圆弧拖动进度条实现的示例代码

    本篇文章主要介绍了react-native 圆弧拖动进度条实现的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 在React中实现分块导出大量数据表格并压缩成图片的解决方案

    在React中实现分块导出大量数据表格并压缩成图片的解决方案

    在现代Web开发中,处理和展示大量数据是一个常见的挑战,特别是在使用React框架时,我们经常需要将这些数据以表格的形式展示,并提供导出功能,本文将介绍如何在React中实现一个高效、分块导出大量数据表格,并将其压缩为图片的解决方案,需要的朋友可以参考下
    2024-12-12
  • ReactJS中不同类型的状态详解

    ReactJS中不同类型的状态详解

    这篇文章主要为大家介绍了ReactJS中不同类型的状态详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • React Native系列之Recyclerlistview使用详解

    React Native系列之Recyclerlistview使用详解

    这篇文章主要为大家介绍了React Native系列之Recyclerlistview使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • React Native 混合开发多入口加载方式详解

    React Native 混合开发多入口加载方式详解

    这篇文章主要介绍了React Native 混合开发多入口加载方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • React.js绑定this的5种方法(小结)

    React.js绑定this的5种方法(小结)

    this在javascript中已经相当灵活,这篇文章主要介绍了React.js绑定this的5种方法(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论