如何在反应日期中添加一年的 select?
How to add a select for a year in react-dates?
在 react-dates
到达正确的年份之前,向右滑动几个月很痛苦,是否可以 添加一些 select 用于 year/month?
是的,从版本 react-dates@17.0.0 开始就可以了! (relevant pull request).
npm install react-dates@latest
- 您可能需要更新
根据 docs 的一些事情,因为破坏性的变化
(对我来说主要是 css)。
然后利用新引入的
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}
/>
}
要为那些想要列出例如过去 100 年的生日的人稍微调整 @lakesare 的答案,这里有一个代码片段:
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 循环以打印出您需要的任何年份。
在 react-dates
到达正确的年份之前,向右滑动几个月很痛苦,是否可以 添加一些 select 用于 year/month?
是的,从版本 react-dates@17.0.0 开始就可以了! (relevant pull request).
npm install react-dates@latest
- 您可能需要更新 根据 docs 的一些事情,因为破坏性的变化 (对我来说主要是 css)。
然后利用新引入的
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} /> }
要为那些想要列出例如过去 100 年的生日的人稍微调整 @lakesare 的答案,这里有一个代码片段:
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 循环以打印出您需要的任何年份。