首页 > 解决方案 > react-native-calendar : 选择日期时选择 ON/OFF

问题描述

我正在为我的项目使用react-native-calendarmark on当我按日期时,我可以日历。但我想mark off再次按下标记的日期。

这是我的功能代码:

 onDayPress = (day) => {
        const _selectedDay = Moment(day.dateString).format(_format);
        this.setState(({pressedDate}) => ({
         pressedDate: {
          ...pressedDate,
          [_selectedDay] : {
          selected: true
          }
       },
       selectedDay:_selectedDay
     }))
     console.log(this.state.pressedDate, 'this.state.pressedDate')
    }

在我的日历中

<Calendar
           style={styles.calendarBox}
           markedDates={this.state.pressedDate}
           onDayPress={this.onDayPress}
           markingType={'multi-dot'}
           monthFormat={'yyyy MMMM'}/>

有什么方法可以标记开和关日期吗?另外,我只想标记最多三个日期。这可能吗?

另外,当我console.log('this.state.pressedDate')一开始不确定时。当我再次单击它时,我会知道为什么会发生这种情况?

标签: javascriptreact-native

解决方案


有什么方法可以标记开和关日期吗?

正如您在Calendarimplementation中看到的,它仅在您将差异传递current给该组件时才会更新。你可以这样做:

  _onDayPress = day => {
    const { dateString } = day;
    const { markedDates } = this.state;

    const isMarkedBefore = !!(
      markedDates[`${dateString}`] && 
      markedDates[`${dateString}`].selected
    );
    markedDates[`${dateString}`] = { selected: !isMarkedBefore };

    this.setState(
     { ...this.state, markedDates, current: null }, 
     () => {
       this.setState({
        ...this.state,
        current: dateString
       });
     });
  };


  ...
  <Calendar
       style={styles.calendarBox}
       current={this.state.current}
       markedDates={this.state.markedDates}
       onDayPress={this._onDayPress}
       markingType={'multi-dot'}
       monthFormat={'yyyy MMMM'}/>

当我 console.log('this.state.pressedDate') 一开始我得到未定义。当我再次单击它时,我会知道为什么会发生这种情况?

setState是异步函数,所以如果你想查看之后你的状态发生了什么变化,你应该登录第二个回调参数,比如

   this.setState({...someState}, () => {
     console.log(this.state);
   })

推荐阅读