代码之家  ›  专栏  ›  技术社区  ›  Evgenia Karunus

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

  •  0
  • Evgenia Karunus  · 技术社区  · 6 年前

    几个月过去,直到我找到了合适的年头,这是一种痛苦 react-dates ,是否可以 为年/月添加一些select

    1 回复  |  直到 6 年前
        1
  •  15
  •   Evgenia Karunus    6 年前

    是的,这是可能的,因为 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}
          />
      }
      
        2
  •  4
  •   efru    5 年前

    要稍微调整@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}
            />
        )
    }
    

    推荐文章