【问题标题】:How to set multiple selected date colors in react native calendars?如何在反应本机日历中设置多个选定的日期颜色?
【发布时间】:2019-08-30 11:56:12
【问题描述】:

我在我的项目中使用react-native-calendars。我正在尝试选择多个日期并尝试更改其颜色。当我安慰选定的日期时,我得到了选定的日期。但我无法改变它的颜色。任何帮助都非常感谢。以下是我的代码

Calendar.js

  selectDate(day) {
        let selectedDate = day.dateString;
        if (this.state.dates[selectedDate]) {
          const newDates = this.state.dates;
          delete newDates[selectedDate]
          this.setState({ dates: newDates });
        } else {
          const newDates = this.state.dates;
          newDates[selectedDate] = [
            { selected: true, startingDay: true, color: '#05A081' },
            { selected: true, endingDay: true, color: '#05A081' },
          ]
          this.setState({ dates: newDates });
          console.log("NEW_ARRAY", this.state.dates);
        }
      }
   ....

    <CalendarList
              minDate={Date.now()}
              pastScrollRange={24}
              futureScrollRange={24}
              markingType={'period'}
              onDayPress={(day) => this.selectDate(day)}
              markedDates={this.state.dates}
            />

以下是控制台结果

NEW_ARRAY 
{2019-09-03: Array(2), 2019-09-04: Array(2), 2019-09-05: Array(2)}
2019-09-03: Array(2)
0: {selected: true, startingDay: true, color: "#05A081"}
1: {selected: true, endingDay: true, color: "#05A081"}
length: 2
2019-09-04: (2) [{…}, {…}]
2019-09-05: (2) [{…}, {…}]

【问题讨论】:

    标签: javascript react-native react-native-android react-native-calendars


    【解决方案1】:

    你可以像这样改变颜色。另外,请给the documentation 一个评价。

    selectDate(day) {
            let selectedDate = day.dateString;
            if (this.state.dates[selectedDate]) {
              const newDates = this.state.dates;
              delete newDates[selectedDate]
              this.setState({ dates: newDates });
            } else {
              const newDates = this.state.dates;
              newDates[selectedDate] = [
                { selected: true, startingDay: true, color: 'yourColorHere' }, //change color here
                { selected: true, endingDay: true, color: 'yourColorHere' },//change color here
              ]
              this.setState({ dates: newDates });
              console.log("NEW_ARRAY", this.state.dates);
            }
          }
       ....
    
        <CalendarList
                  minDate={Date.now()}
                  pastScrollRange={24}
                  futureScrollRange={24}
                  markingType={'period'}
                  onDayPress={(day) => this.selectDate(day)}
                  markedDates={this.state.dates}
                />
    

    【讨论】:

      【解决方案2】:
        const selectDate=(day)=> {
          let selectedDate = day.dateString;
          let newDates = dates;
          if (dates[selectedDate]) {
            delete newDates[selectedDate]
          } else {
            
            newDates[selectedDate]={selected: true, marked: true, selectedColor: Colors.YELLOW};
            
            
          }
          setdates({...newDates})
        }
      

      【讨论】:

      • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
      猜你喜欢
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多