_renderDay(currentDate, index) {
    const day = currentDate.getDate();
    const month = currentDate.getMonth();
    const year = currentDate.getFullYear();
    const isOtherMonth = month !== this.state.month;
    const dateKey = convertDateToDateKey(currentDate);
    const isDisabledDay = !this._isWithinMinAndMax(currentDate);

    let ariaSelected = false;

    let dayStyle = {
      ...defaultStyle.dayStyle,
      ...this.props.dayStyle,
    };

    if (this.props.readOnly) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.readOnlyDayStyle,
        ...this.props.readOnlyDayStyle,
      };
    }

    if (isOtherMonth) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.otherMonthDayStyle,
        ...this.props.otherMonthDayStyle,
      };
    }

    if (this.props.disabled || isDisabledDay) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.disabledDayStyle,
        ...this.props.disabledDayStyle,
      };
    }

    if (currentDate.getDay() === this.localeData.weekEnd) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.weekendStyle,
        ...this.props.weekendStyle,
      };
    }

    if (day === today().getDate() && month === today().getMonth() && year === today().getFullYear()) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.todayStyle,
        ...this.props.todayStyle,
      };
    }

    if (this.state.selectedDate && day === this.state.selectedDate.getDate()
      && currentDate.getMonth() === this.state.selectedDate.getMonth() && currentDate.getFullYear() === this.state.selectedDate.getFullYear()) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.selectedDayStyle,
        ...this.props.selectedDayStyle,
      };
      ariaSelected = true;
    }

    if (this.state.focusedDateKey === dateKey) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.focusDayStyle,
        ...this.props.focusDayStyle,
      };
      if (this.props.disabled || isDisabledDay) {
        dayStyle = {
          ...dayStyle,
          ...defaultStyle.disabledFocusDayStyle,
          ...this.props.disabledFocusDayStyle,
        };
      }
    }

    if (!this.props.disabled && !this.props.readOnly && this.state.activeDay === dateKey) {
      dayStyle = {
        ...dayStyle,
        ...defaultStyle.activeDayStyle,
        ...this.props.activeDayStyle,
      };
    }

    const renderedDay = this.props.renderDay ? this.props.renderDay(currentDate) : day;

    if (!this.props.showOtherMonthDate && isOtherMonth) {
      return (
        <span
          key={ `day-${index}` }
          style={ dayStyle }
          {...this.emptyDayProps}
        />
      );
    }

    if (isDisabledDay) {
      return (
        <DisabledDay
          key={ `day-${index}` }
          style={ dayStyle }
          dateKey={ dateKey }
          onDayMouseEnter={ this._onDayMouseEnter }
          onDayMouseLeave={ this._onDayMouseLeave }
          disabledDayProps={ this.disabledDayProps }
        >
          { renderedDay }
        </DisabledDay>
      );
    }

    return (
      <Day
        key={ `day-${index}` }
        dateKey={ dateKey }
        onDayMouseDown={ this._onDayMouseDown }
        onDayMouseUp={ this._onDayMouseUp }
        onDayMouseEnter={ this._onDayMouseEnter }
        onDayMouseLeave={ this._onDayMouseLeave }
        onDayTouchStart={ this._onDayTouchStart }
        onDayTouchEnd={ this._onDayTouchEnd }
        onDayTouchCancel={ this._onDayTouchCancel }
        selected={ ariaSelected }
        style={ dayStyle }
        dayProps={this.dayProps}
      >
        { renderedDay }
      </Day>
    );
  }
Function will return jsx for rendering the a day.
It will apply various styles in sequence as below (styles will be additive):
1. If component is readOnly apply readOnly styles
2. If component is disabled apply disabled styles
   - If component is disabled and hovered apply disableHover styles
3. If day is weekend apply weekendStyle
4. If its day in current month and component is not disabled or readOnly:
   - If its current day apply todayStyle
   - If this is selected day apply selectedDayStyle
   - If component is hovered apply hover styles
   - If component is hovered and active apply hoveredStyles + activeStyles
   - If component is hovered and not active but focused and preventFocusStyleForTouchAndClick apply focus styles
5. If current day represents other months day in calendar apply otherMonthDayStyle