Ich benutze moment.duration, um einen Countdown-Timer in einer react.js-App zu erstellen, wobei die ursprüngliche Countdown-Zeit von einem API-Aufruf in componentDidMount abgerufen wird.Reagieren mit Moment.duration: Komponente erneut rendern, wenn die Dauer 0 erreicht
So viel funktioniert gut - ich möchte, sobald meine Dauer 0 ist (sobald ein Ereignis beginnt), die Komponente erneut rendern (die wiederum eine neue Zeit ziehen wird als Countdown dienen, als die JSON wird mit den kommenden Ereignissen aktualisiert.
Dies scheint, wie es mit React sollte einfach sein, da ich im Grunde der Komponente jedes Mal neu machen will ich die Dauer erreichen, oder wenn der Countdown = 0.
Hier ist der Teil meines Codes machen:
render: function() {
UpcomingMenu = this.state.upcomingList || [];
var currentTime = Math.round(new Date().getTime()/1000);
// current system time in seconds
console.log(currentTime);
return (
<div>
<span>Upcoming LIVE Event: </span>
{UpcomingMenu.map(function(el, i){
if (el.eventStart > currentTime) {
while (i < 1) { //i hate while loops. find a better way...
var diffTime = el.eventStart - currentTime;
var duration = moment.duration(diffTime*1000, 'milliseconds');
var interval = 1000;
if (typeof el.eventStart !== 'undefined') { //to prevent render twice error. i'm sure there's a better way around this.
setInterval(function(){
duration = moment.duration(duration - interval, 'milliseconds');
$('.countdown').text(duration.days() + "d " + duration.hours() + "h " + duration.minutes() + "m " + duration.seconds() + "s")
}, interval);
//re-render component?
};
var eventDetailsURL = decodeURIComponent(el.eventDetailsURL);
var eventLiveURL = decodeURIComponent(el.eventLiveURL);
return <span key={i}>
<strong><a target="_blank" href={eventDetailsURL}>{el.eventTitle}</a></strong>
<p>
<span className="countdown"></span>
</p>
</span>
};
};
})}
</div>
);
}
});
, wenn die Dauer 0 ist, aktualisieren Sie den Zustand mit mehr Daten. Dies wird für das Rendern sorgen. – vijayst
@Vijay Danke-- Ja, aber die Dauer wird nur bei Pagelad eingestellt. – dilettante
@dilettante Auf der Hauptseite von reactjs gibt es ein Timer-basiertes Beispiel: https://facebook.github.io/react/index.html. Wenn du es noch nicht getan hast, sieh es dir an. Im Wesentlichen möchten Sie etwas wie "tick" -Funktion in dort tun und setzen Sie den Zustand (oder den Zustand zurücksetzen) entsprechend, die für das erneute Rendern der Komponente sorgen wird. – KumarM