React Datepicker(无法获取输入值)

Posted

技术标签:

【中文标题】React Datepicker(无法获取输入值)【英文标题】:React Datepicker( can't get value of input) 【发布时间】:2018-04-19 23:21:06 【问题描述】:

我是反应新手。我需要使用react-datepicker

我想在更改日期时获取输入值。 如果我点击 2017 年 10 月 20 日,我想将 2017 年 10 月 20 日放在我的变量中。 但我应该使用组件而不是输入的主要问题。

在我刚刚从状态中获取价值之前。像this.state.value。但现在它是状态中的对象(时刻)。而且这个对象没有值字段。

这是我的代码:

export default class DatePicker extends Component 
constructor (props) 
    super(props);
    // this.props.date should looks like "29 November 2017 00:00"
    // second argument for moment() it is format of date, because RFC 2822 date time format
    this.state = 
        date: moment(this.props.value, 'LLL')
    ;

handleChange = (date) => 
  // const valueOfInput = this.state.date  <--- I want string with date here
  console.log('this.state.date',this.state.date);
  this.setState(date: date);
;
render() 
    return <Form.Field>
              <Label>
                <Picker
                  selected=this.state.date
                  onChange=this.handleChange
                  dateFormat="LLL"
                  locale=this.props.language
                />
              </Label>
          </Form.Field>

【问题讨论】:

你用的是什么主题库? 【参考方案1】:

就用这个吧:

handleChange = date => 
  const valueOfInput = date.format();
  ///...
;

因为这个datepicker 返回一个moment.js 对象!

有关更多信息,请查看 moment.js docs here。

【讨论】:

谢谢!,我在这个问题上苦苦挣扎了两天,这样的救命稻草:) 我得到 date.format() 不是函数。我必须安装时刻吗? @justin 你找到解决方案了吗? 此答案对于较新版本的 react-datepicker 不正确,因为不再使用 moment.js,而是使用 date-fns。【参考方案2】:

试试这个

<DatePicker 
   onChange=(value, e) => this.handleChange(value, e)
   selected=this.state.inputValue otherProps=here 
/>

// you can access the value field in handleChange by e.target.value

handleChange(value, e) 
    console.log(value); // this will be a moment date object
    console.log(e.target.value); // this will be a string value in datepicker input field

【讨论】:

【参考方案3】:

这通过使用以下方法为我解决了:

handleDateChange = date => 
let selectedDateFromCalender = date.toUTCString();
this.setState(
      actualStartDate: selectedDateFromCalender,
  );

<DatePicker
selected=this.state.startDate
onChange=this.handleDateChange/>

您也可以使用以下方法,根据您的要求选择:

toISOString: "2020-10-05T09:10:38.000Z"

toJSON: "2020-10-06T09:09:16.000Z"

toUTCString: "2020 年 10 月 8 日星期四 09:11:24 GMT"

【讨论】:

它会给你选择的日期。 有什么意义? “选定”。我的打字稿希望“选择”是日期类型,而不是字符串?【参考方案4】:

如果您想获取新值(一旦用户单击 DatePicker 中的新日期),请将事件传递给方法。

class MyComponent extends React.Component 
  constructor(props) 
    this.state = inputValue: moment(), // this will set the initial date to "today", 
                                         // you could also put another prop.state value there
    this.handleChange = this.handleChange.bind(this);
  
  


  handleChange(value) 
    console.log(value); // this will be a moment date object
    // now you can put this value into state
    this.setState(inputValue: value);
  

  render()
    ...
    <DatePicker 
       onChange=(event) => this.handleChange(event)
       selected=this.state.inputValue otherProps=here />
    ...
  
;

【讨论】:

【参考方案5】:

新版本的 react-datepicker 库停止使用 moment.js 对象,所以如果你想获得日期的格式化字符串表示,这是我的解决方案。

首次导入 import format from "date-fns/format"; 那么

    <DatePicker 
       onChange=(value)=>this.handleChange(format(value, "yyyy/MM/dd",  
       awareOfUnicodeTokens: true ))
       dateFormat="yyyy/MM/dd"
       selected=this.state.inputValue otherProps=here />
    ...

【讨论】:

【参考方案6】:

您可以在日期对象上使用 getTime() 辅助函数来获取该特定日期的毫秒时间戳,这是一种 javascript 数字数据类型。用于将数据保存在应用程序的后端。例如 Flask Peewee ORM 需要为 DateTimeField 保存时间戳。

const [startDate, setStartDate] = useState(new Date())

<DatePicker
  onSelect( date => 
    setStartDate(getTime(date))
  
/>

来源:https://date-fns.org/v2.0.0-alpha.7/docs/getTime

将其与将默认状态值设置为页面加载时间戳的效果相结合:

useEffect(() => 
    setStartDate(getTime(startDate))
  , [])

否则,对于您的 UI,您可以使用 format() 辅助函数以任何给定格式获取给定对象的字符串值:

<h1>format(startDate, "MMMM d, yyyy h:mm aa")</h1>

来源:https://date-fns.org/v2.0.0-alpha.7/docs/format

【讨论】:

【参考方案7】:

我有同样的问题,我使用以下解决方案解决了它。请试一试:

<p>this.state.date.toLocaleDateString()</p>

【讨论】:

【参考方案8】:
<input id="tdate" type="date" name="todate" onchange="getToDate(event);">

function getToDate(e)
 const tdate = e.target.value;

//alert(tdate);
//console.log(tdate);
//return tdate;
;

这里我试图访问函数外部的“tdate”变量。

【讨论】:

以上是关于React Datepicker(无法获取输入值)的主要内容,如果未能解决你的问题,请参考以下文章

react-datepicker“无法阻止被动事件侦听器调用中的默认值”

带有 React-testing-library 的 Antd Datepicker Jest 未设置输入值

无法在 REACT.js 中输入和获取值

不允许用户在 React DatePicker 中写入日期

如何使用 Formik 在 react-datepicker 中设置初始日期?

react-datepicker 没有初始值