我想在从React DatePicker中选择日期时更新组件的状态。我下面有一些奇怪的行为。
当前行为的例子:
>
我选择2017年3月28日并获得以下控制台日志
主要的ffde8a1f。js:8它改变了日期
main.ffde8a1f.js: 8日期=1490673600000
主要的ffde8a1f。js:8 dueDate值=
假设我选择2017年3月22日并获得以下控制台日志:
主要的ffde8a1f。js:8它改变了日期
主要的ffde8a1f。js:8日期=1490155200000
main.ffde8a1f.js:8 dueDate值=1490673600000
第二个和第三个日志应具有相同的值。有人能解释一下为什么会发生这种奇怪的行为吗?
我的尝试
进口
import React from 'react';
import DatePicker from 'react-datepicker';
import moment from 'moment';
import 'react-datepicker/dist/react-datepicker.css';
组件
我设置dueDate
的状态为"
开始。
export default class Request extends React.Component {
constructor(props) {
super(props);
this.state = {
dueDate: '',
}
this.handleChangeDate = this.handleChangeDate.bind(this);
}
处理日期选择
ISSUE我的handleChangeDate
函数将在提供日期时触发,并且以毫秒为单位的日期将登录到控制台,但是dueDate被记录为它应该是的前一个值。
handleChangeDate(date) {
console.log("it changed dates");
console.log('date = ' + date); //date in milliseconds logs properly
this.setState({
dueDate: date
});
console.log('dueDate value = ' + this.state.dueDate); //date from state logs the previous value rather than its new value
}
Render
目前,我正在简化日期选择器,以最大限度地减少潜在的错误。只有所选日期从状态和所选日期的handleChangeDate
方法传入。
render() {
return (
<div className="requestDetails">
<h2>Due Date</h2>
<DatePicker
selected={this.state.dueDate}
onChange={this.handleChangeDate}
/>
</div>
);
}
}
shouldDidUpdate(nextProps, nextState) {
if (this.state.startDate !== nextState.startDate) {
return true;
}
return true;
}
用你的日期代替开始日期
this.setState
不能保证是同步的,因为它们可以批量处理。这意味着,尽管您在代码中的setState
之后调用console.log
,但状态实际上可能尚未更改。
从React文档:
setState()不会立即对此进行变异。状态,但创建挂起的状态转换。访问这个。调用此方法后的状态可能返回现有值。无法保证对setState调用的同步操作,并且可能会对调用进行批处理以提高性能。
如果要检查您的状态是否已更新,可以使用回调作为setState
的第二个参数,或者在shouldComponentUpdate(nextrops,nextState)
生命周期方法中添加一些逻辑。
示例:
handleChangeDate(date) {
this.setState({
dueDate: date
}, () => console.log(this.state.dueDate)); // This will show the updated state when state is set.
}
或者
shouldComponentUpdate(nextProps, nextState) {
if (this.state.dueDate !== nextState.dueDate) {
console.log('dueDate: ', nextState.dueDate);
}
}
setState文档:(注意函数签名,setState(nextState,回调)
)
https://facebook.github.io/react/docs/react-component.html#setstate
应更新组件文档:
https://facebook.github.io/react/docs/react-component.html#shouldcomponentupdate
日期选择组件。滚动选择交互,基于 Scrollpicker 实现。 Usage 全部引入 import { Datepicker } from 'beeshell'; 按需引入 import Datepicker from 'beeshell/dist/components/Datepicker'; Examples Datepicker 与 BottomModal 组合应用 Code 详细
DatePicker 日期选择器 用于选择或输入日期 选择日 以「日」为基本单位,基础的日期选择控件 基本单位由type属性指定。快捷选项需配置picker-options对象中的shortcuts,禁用日期通过 disabledDate 设置,传入函数 <template> <div class="block"> <span class="demonstration">默认</spa
用于选择或输入日期 选择日 以「日」为基本单位,基础的日期选择控件 基本单位由type属性指定。通过shortcuts配置快捷选项,禁用日期通过 disabledDate 设置,传入函数 <template> <div class="block"> <span class="demonstration">默认</span> <el-date-picker v-mod
用于选择或输入日期 选择日 以「日」为基本单位,基础的日期选择控件 你可以在 [model] 中定义一个初始值,如果留空,则优先显示当前时间。 <el-date-picker (modelChange)="handle($event)" (clear-click)="clearClickHandle($event)"> </el-date-picker> <script type="text"
datePicker 日期选择或者时间选择 使用方法 AlipayJSBridge.call('datePicker', { beginDate: '2016-10-10', minDate: '2016-10-9', maxDate: '2017-10-9', mode: 1, }, function(e) { alert(JSON.stringify(e)); });
我有一个编辑屏幕,其中在我的开始日期和结束日期是从数据库中预先填充的。该控件是一个UIdatePicker插件。我想根据来自服务器的开始日期限制/禁用以前的日期。此外,当我更改日期时,我希望结束日期从开始日期后的一天开始。由于首先填充值,然后将控件添加到输入字段,因此我无法控制它。 任何帮助都将不胜感激。代码如下: