когда вы столкнетесь с этой проблемой, сначала вы должны прочитать официальный API . Я нахожу два реквизита disabledDates
и enableDateChange
. как говорят документы, я считаю, что disabledDates
это хорошо.
тогда вы можете использовать следующий код:
<CalendarPicker
...
disabledDates={date => {
let startDate = {...this.state.selectedStartDate}
let endDate ={...this.state.selectedEndDate}
if(date.isBetween(startDate, endDate)){
return true
} else {
return false
}
}}
// or use it as an array
Если вы хотите понять это больше, вы можете прочитать исходный код. исходный код находится в index.js и Day.js
// in the index.js, it is the CalendarPicker, in it render method, we find the disabledDates, then we look at the DaysGridView.js
<DaysGridView
enableDateChange={enableDateChange}
month={currentMonth}
year={currentYear}
styles={styles}
onPressDay={this.handleOnPressDay}
disabledDates={_disabledDates}
minRangeDuration={minRangeDurationTime}
maxRangeDuration={maxRangeDurationTime}
startFromMonday={startFromMonday}
allowRangeSelection={allowRangeSelection}
selectedStartDate={selectedStartDate && moment(selectedStartDate)}
selectedEndDate={selectedEndDate && moment(selectedEndDate)}
minDate={minDate && moment(minDate)}
maxDate={maxDate && moment(maxDate)}
textStyle={textStyle}
todayTextStyle={todayTextStyle}
selectedDayStyle={selectedDayStyle}
selectedRangeStartStyle={selectedRangeStartStyle}
selectedRangeStyle={selectedRangeStyle}
selectedRangeEndStyle={selectedRangeEndStyle}
customDatesStyles={customDatesStyles}
/>
// in the DaysGridViews render method, the props is pass to the day, then we look at the day.js
<Day
key={day}
day={day}
month={month}
year={year}
styles={styles}
onPressDay={onPressDay}
selectedStartDate={selectedStartDate}
selectedEndDate={selectedEndDate}
allowRangeSelection={allowRangeSelection}
minDate={minDate}
maxDate={maxDate}
disabledDates={disabledDates}
minRangeDuration={minRangeDuration}
maxRangeDuration={maxRangeDuration}
textStyle={textStyle}
todayTextStyle={todayTextStyle}
selectedDayStyle={selectedDayStyle}
selectedRangeStartStyle={selectedRangeStartStyle}
selectedRangeStyle={selectedRangeStyle}
selectedRangeEndStyle={selectedRangeEndStyle}
customDatesStyles={customDatesStyles}
enableDateChange={enableDateChange}
/>
// in the Day.js, firstly, it will check it and return a props dateIsDisabled
if (disabledDates) {
if (Array.isArray(disabledDates) && disabledDates.indexOf(thisDay.valueOf()) >= 0) {
dateIsDisabled = true;
}
else if (disabledDates instanceof Function) {
dateIsDisabled = disabledDates(thisDay);
}
}
//then it will check it if it is outrange
dateOutOfRange = dateIsAfterMax || dateIsBeforeMin || dateIsDisabled || dateIsBeforeMinDuration || dateIsAfterMaxDuration;
// we find if the date is in the disabledDates, the dateIsDisabled is true, then dateOutOfRange is true, in this case, it returns the following view
else { // dateOutOfRange = true
return (
<View style={styles.dayWrapper}>
<Text style={[textStyle, styles.disabledText]}>
{ day }
</Text>
</View>
)
}
// in the end, it is a text, so it can not opress
Я надеюсь, что вы понимаете ум, а затем ищите решение самостоятельно. В конце концов, я надеюсь, что это может помочь вам