Javascript React DATE PICKER在延迟onClick时打开
我正面临着一个奇怪的问题。我已使我的日期选择器与redux表单兼容,代码如下:Javascript React DATE PICKER在延迟onClick时打开,javascript,reactjs,delay,react-datepicker,Javascript,Reactjs,Delay,React Datepicker,我正面临着一个奇怪的问题。我已使我的日期选择器与redux表单兼容,代码如下: <DatePicker customInput={<CustomDateInputNew {...props} />} onChange={date => { props.input.onChange(date ? formatValueToState(date) : ""); if (props.onSelect) { props.onSelect(dat
<DatePicker
customInput={<CustomDateInputNew {...props} />}
onChange={date => {
props.input.onChange(date ? formatValueToState(date) : "");
if (props.onSelect) {
props.onSelect(date);
}
}}
dateFormat="DD/MM/YYYY"
openToDate={props.openToDate}
selected={
props.input.value ? parseStateToValue(props.input.value) : undefined
}
filterDate={day => isDateUnavailable(day, props.availability)}
locale={moment.locale("en-gb")} //sets monday first day of week
/>
其中,days是一个数组,格式为['2018-09-09']。此日期选择器将显示此数组中包含的日期。我面临的问题是,日期选择器出现在tw0或单击后3秒之后。为什么会这样?是否有其他人面临相同或相关的问题?是不是和过滤日期有关??谢谢 您的
isDateUnavailable
函数非常繁重,因此我可以想象在所有可能的日期上运行该函数时,日期选择器需要2-3秒才能初始化
我认为最好将props.availability
数组作为日期选择器,您可以使用includeDates
prop选择日期
示例
class Example extends React.Component {
render() {
return (
<DatePicker
includeDates={[
moment("2018-09-09"),
moment("2018-09-09").subtract(1, "days")
]}
/>
);
}
}
类示例扩展了React.Component{
render(){
返回(
);
}
}
我同意isDateUnavailable
重量
你可以把它弄轻一点,看看会发生什么
export const checkAvailability = (availableDays) =>
(!availableDays)
? () => true // If the array is empty, just create a function which returns always true!
: (currentDay) =>
availableDays.filter(
dayString => dayString === currentDay.format('YYYY-MM-DD')
).lenght > 0;
像这样使用它
filterDate={checkAvailability(props.availability)}
基本上,它不是从days数组中的每个项目创建一个矩对象,而是以您的格式格式化日期(从datepicker)。然后比较字符串(应该更快!)。您的
isDateUnavailable
相当重,因此我可以想象在所有可能的日期上运行时,日期选择器需要2-3秒才能初始化。我认为最好给日期选择器一个你想要的日期数组,使用includeDates
属性。要确定是否不可用
是个问题,就像@Tholle说的,在isDateUnavailable
中尝试一个简单的返回,看看延迟是否持续或改善。另外,使用精确的格式解析日期字符串可以加快速度:时刻(项目“YYYY-MM-DD”)代码>我的数组可能非常大。它可以有很多元素。如何对许多元素执行此操作?@user7334203请尝试includeDates={props.availability.map(d=>moment(d)}
并查看它是否比您当前拥有的更快。
filterDate={checkAvailability(props.availability)}