0
我正在嘗試構建一個非常簡單的應用程序React
,它會告訴您自給定日期以來有多少天過去了。我正在使用React
,Moments
和ReactJS Datepicker
作爲此應用的基礎,以便快速實施。如何讓文本動態地隨着React改變,但不能在Render中調用改變?
我發現了一個error
當我嘗試選擇一個日期說
warning.js:44
Warning: setState(...): Cannot update during an existing state transition (such as within 'render' or another component's constructor)
我明白這意味着我不能有一個功能更新state
我目前顯示由於render
的問題,但我很難弄清楚如何在不更新render
方法的情況下獲得此類功能。
這是當前的應用程序:
import React, { Component } from 'react';
import DatePicker from 'react-datepicker';
import moment from 'moment';
import './App.css';
import 'react-datepicker/dist/react-datepicker.css';
class App extends Component {
constructor() {
super();
this.handleChange = this.handleChange.bind(this)
this.state = {
startDate: moment(),
dateDiff: moment(),
dateCheck: false
};
}
handleChange(date) {
this.setState({
startDate: date,
dateCheck: true
});
}
showDiff(date, dateCheck) {
if (dateCheck) {
this.setState({
dateCheck: false,
dateDiff: moment().startOf(date).fromNow()
});
}
}
render() {
return (
<div className="App">
<div className="DatePicker">
<DatePicker
selected={this.state.startDate}
onChange={this.handleChange}
showYearDropdown
dateFormatCalendar="MMMM"
isClearable={true}
placeholderText='Enter A Date' />
</div>
<div>
{this.showDiff(this.state.startDate, this.state.dateCheck)}
</div>
</div>
);
}
}
export default App;
我想有它更新每一個新的日期選擇時間的計算天數,並認爲dateCheck
標誌會幫助,但它沒有。
謝謝
太棒了!我很愚蠢,沒有意識到:( 我會將你的帖子標記爲答案,但對於試圖這樣做的人,我犯了另一個錯誤,並將dateDiff初始化爲一個時刻對象和'fromNow'函數返回一個產生錯誤的字符串 簡單地使'dateDiff:'''修正了問題 現在文本顯示正確,但它實際上並沒有更新,並且從現在起不斷說幾秒鐘,而不管日期我選擇:( 編輯*我不得不添加另一行以允許datePicker知道在同一個'setState'調用中顯示'startDate:date'的日期。 –
啊我明白了代碼現在要做的事情。最初只是爲了概念而回答,而不是考慮背後的邏輯,我修改了它現在 - 給它一個嘗試,讓我知道如果這工作:) – Karin
太棒了!是的,我明白你現在是怎麼做到的。非常感謝你:) 編輯*現在我覺得可笑!我最初的想法是,我可以告訴從現在到某一特定日期之間有多少天,但是在我進入我的生日之後,它只是在幾年內將它交給我......回到繪圖板! –