javascript - 状态更新时 Ant Design Range Picker 不更新日期
问题描述
我对 Ant Design 组件有疑问:日期选择器(范围选择器)。[ https://ant.design/components/date-picker/] 我将它与 React 和钩子一起使用。我需要能够通过单击按钮来更改范围选择器内的日期。状态中的数据正在正确更新,但不会更新日期选择器中的日期。我认为问题在于 Ant Design 用于 Date Picker 的 moment.js 库。在日期选择器中,日期值包含在矩函数中。也许有一种方法可以在状态更改后手动更新组件?我有什么问题吗?
const DateSelect = () => {
const RangePicker = DatePicker.RangePicker;
const dateFormat = 'YYYY/MM/DD';
const [currentDate, setCurrentDate] = useState(moment().format(dateFormat));
const addSevenDays = () => {
const weekFromNow = moment()
.add(1, 'w')
.format(dateFormat);
setCurrentDate(weekFromNow);
console.log(currentDate);
};
return (
<div>
<Button onClick={addSevenDays}>Add 7 days</Button>
<RangePicker
defaultValue={[
moment(currentDate, dateFormat),
moment(currentDate, dateFormat),
]}
format={dateFormat}
/>
<span> {currentDate} </span>
</div>
);
};
render(<DateSelect />, document.getElementById('app'));
解决方案
你犯了几个错误:
- 您没有将 onChange 回调传递给 DatePicker 组件 - 这意味着您的 DatePicker 的输入不会传播到 DateSelect 组件
- 您正在使用
defaultValue
而不是value
,当状态更新时,它不允许您更改父组件的值 - 您只在该州保存一个日期,但是,我想您想保存一个范围
我已经分叉了你的 codepen 并修复了它:https ://codepen.io/anon/pen/VgJzER
推荐阅读
- excel - 如何搜索包含特定日期的单元格?
- cloud - 有没有办法通过单个 Compute Engine 的 VM 实例连接多个 Cloud memorystore 实例
- java - Java链表递归方法
- c# - 在 Stringbuilder 中附加密钥对。AddIfNotNull 方法
- django - 我使用了 Material Forms 模块,昨天在尝试启动项目后,我收到 ImportError 错误:“No module named material”
- typescript - 如何定义将类型作为强类型参数的 Typescript 函数
- reactjs - 渲染前等待多个组件的异步调用
- ios - 如何获取在 UIImageView 上点击的点的坐标,以便它们在所有设备(不同大小/分辨率)上处于相同位置?
- node.js - 使用 fluentd 更新 mongo 记录
- java - 从命令行注入地图