如何在反应日期中添加一年的选择?

时间:2018-09-16 19:46:57

标签: javascript reactjs calendar react-dates

在我用react-dates到达正确的年份之前,要滑动数月很痛苦,是否可以为年份/月份添加一些选择

2 个答案:

答案 0 :(得分:7)

是的,自版本 react-dates@17.0.0 起可能! (relevant pull request)。

  1. npm install react-dates@latest
  2. 您可能需要更新一个 docs所涉及的内容很少,因为发生了重大变化 (对我而言,大多数情况下是CSS)。
  3. 然后利用新引入的 renderMonthElement道具可以编写自定义的月份和年份选择器, 例如:

    import React from 'react';
    import moment from 'moment';
    import { SingleDatePicker } from 'react-dates';
    
    class Main extends React.Component {
      state = {
        date: moment(),
        focused: true
      }
    
      renderMonthElement = ({ month, onMonthSelect, onYearSelect }) =>
        <div style={{ display: 'flex', justifyContent: 'center' }}>
          <div>
            <select
              value={month.month()}
              onChange={(e) => onMonthSelect(month, e.target.value)}
            >
              {moment.months().map((label, value) => (
                <option value={value}>{label}</option>
              ))}
            </select>
          </div>
          <div>
            <select value={month.year()} onChange={(e) => onYearSelect(month, e.target.value)}>
              <option value={moment().year() - 1}>Last year</option>
              <option value={moment().year()}>{moment().year()}</option>
              <option value={moment().year() + 1}>Next year</option>
            </select>
          </div>
        </div>
    
      render = () =>
        <SingleDatePicker
          date={this.state.date}
          onDateChange={(date) => this.setState({ date })}
    
          focused={this.state.focused}
          onFocusChange={({ focused }) => this.setState({ focused })}
    
          renderMonthElement={this.renderMonthElement}
        />
    }
    

答案 1 :(得分:0)

要稍微调整@lakesare答案,以列出想要生日的最后100年的人,下面是一个代码段:

renderMonthElement = ({ month, onMonthSelect, onYearSelect }) => {
    let i
    let years = []
    for(i = moment().year(); i >= moment().year() - 100; i--) {
        years.push(<option value={i} key={`year-${i}`}>{i}</option>)
    }
    return (
        <div style={{ display: "flex", justifyContent: "center" }}>
            <div>
                <select value={month.month()} onChange={e => onMonthSelect(month, e.target.value)}>
                    {moment.months().map((label, value) => (
                        <option value={value} key={value}>{label}</option>
                    ))}
                </select>
            </div>
            <div>
                <select value={month.year()} onChange={e => onYearSelect(month, e.target.value)}>
                    {years}
                </select>
            </div>
        </div>
    )
}

render() {
    return (
        <SingleDatePicker
            ...
            renderMonthElement={this.renderMonthElement}
        />
    )
}

修改第4行的for循环以打印出所需的年份。