reactjs - 如何解决状态更新的时间以保存反应中的双击
问题描述
我已经实现了一些基本逻辑来使用日期选择器来更改状态中的日期,然后将其作为字符串传递给变量(json 路径)。我的问题是我需要单击日期选择器两次才能更改内容。我希望有人可以帮助我订购,以便在重新渲染之前更新状态(如果有意义的话)?
import React, {Component} from "react";
import '../styles/style.css';
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
class Mainstage extends Component {
constructor(props) {
super(props);
this.state = {
itemsLeft: [],
startDate: new Date(),
startDateFormatted: Intl.DateTimeFormat('en-CA', {year: 'numeric', month: '2-digit',day: '2-digit'}).format(new Date()),
endDate: new Date(),
endDateFormatted: Intl.DateTimeFormat('en-CA', {year: 'numeric', month: '2-digit',day: '2-digit'}).format(new Date())
};
this.handleChangeStart = this.handleChangeStart.bind(this)
this.handleChangeEnd = this.handleChangeEnd.bind(this)
}
handleChangeStart(date) {
this.setState({
startDate: date,
startDateFormatted: Intl.DateTimeFormat('en-CA', {year: 'numeric', month: '2-digit',day: '2-digit'}).format(date)
})
}
handleChangeEnd(date) {
this.setState({
endDate: date,
endDateFormatted: Intl.DateTimeFormat('en-CA', {year: 'numeric', month: '2-digit',day: '2-digit'}).format(date)
})
}
componentDidMount() {
var Data_Left_URL = `http://localhost:5000/changeatdate/${this.state.change}/${this.state.startDateFormatted}`;
fetch(Data_Left_URL)
.then(resultsLeft => {
return resultsLeft.json()
})
.then(dataLeft => {
let itemsLeft = dataLeft.map((i) => {
return(
<ul key={i.containerId} className='container'>
<h1>{i.containerName}</h1>
{
i.vitems.map(el => <li key={el.itemId} className='itemStatusCss' style={{backgroundColor: el.css}}><span className='itemname'>{el.itemName}</span></li>)
}
</ul>
)
})
this.setState({itemsLeft});
})
更新:这是渲染部分:
render() {
console.log('StartDate: ',this.state.startDateFormatted);
console.log('EndDate: ', this.state.endDateFormatted)
return (
<div id='mainstage'>
<div id='mainstage1'>
<span className='datepicker'>
<DatePicker
selected={this.state.startDate}
selectsStart
startDate={this.state.startDate}
endDate={this.state.endDate}
showMonthDropdown
showYearDropdown
dateFormat="dd/MM/yyyy"
onChange={this.handleChangeStart}
/>
</span>
{this.state.itemsLeft}
</div>
<div id="mainstage2">
<span className="breaker"></span>
<span id="ganttbarend"></span>
<span id="ganttbarmiddle"></span>
<span id="ganttbarend"></span>
{this.state.gantt}
</div>
<div id='mainstage3'>
<span className='datepicker'>
<DatePicker
selected={this.state.endDate}
selectsEnd
startDate={this.state.startDate}
endDate={this.state.endDate}
dateFormat="dd/MM/yyyy"
showMonthDropdown
showYearDropdown
onChange={this.handleChangeEnd}
minDate={this.state.startDate}
/>
</span>
{this.state.itemsRight}
</div>
</div>
);
}
}
解决方案
推荐阅读
- python - 切片 numpy 数组与选择单个元素
- jquery - AJAX 返回后关闭 Bootstrap Modal
- java - 重构方法具有不同参数类型的 java 类
- python - 查找和替换不同单词的字符串,但不是子字符串?
- reactjs - 使用 React 将多个状态值传递到输入中
- cmd - 订阅一个主题时如何使 mosquitto_sub 仅打印当前消息
- angular - ERROR 错误:InvalidPipeArgument: '' for pipe 'AsyncPipe'
- python - Python:循环遍历 if 语句的 elif 部分
- typescript - 联合类型上不存在属性
- azure - 有状态服务的 Azure Service Fabric 自动缩放