Ich verwende Facebooks FixedDataTable, um das Aktien-Dashboard anzuzeigen. Was ich erreichen muss, ist Flash feste Datentabelle Zelle (sagen Preis Spalte) grün oder rot basierend auf der Änderung des Preises. Wie erreichen wir Animation innerhalb der festen Datentabelle?Wie kann ich Zelle der festen Datentabelle Komponente animieren?
0
A
Antwort
1
Sie könnten dies mit CSS in den untergeordneten Komponenten der Datentabelle <Cell>
tun. Etwas wie:
componentWillReceiveProps(nextProps) {
// if the price has changed, add a class to do some animation stuff
if (nextProps.price != this.props.price) {
this.setState(className: "fancy-flash-class-in");
}
}
componentDidUpdate() {
// after the component has updated, set the class back
if (this.state.className == "fancy-flash-class-in") {
setTimeout(() = > this.setState(
{className: "fancy-flash-class-out"}),
500);
}
}
componentDidUpdate()
ist wirklich schnell genannt, so dass Sie ein setTimeout
, sonst wird die Animation tun wird nicht funktionieren.
In CSS können Sie Animationen hinzufügen:
- fancy-Flash-Klasse-in: gibt der Komponente eine Highlight-Farbe und einen CSS-Übergang
- fancy-Flash-Klasse-out: die Basiskomponente der Farbe, mit CSS-Animation von rot oder grün zu Grundfarbe zurück
Also in Ihrer CSS-Datei:
.fancy-flash-class-out {
background-color: grey;
transition: background-color 2s;
-webkit-transition: background-color 2s; /* Safari */
}
Einfache Demo codepen here
Nein, das funktioniert nicht. Wenn ich den this.setState innerhalb von componentDidUpdate() kommentiere, kann ich den Zellübergang von der Grundfarbe zu Rot sehen und in dieser roten Farbe bleiben. es scheint, dass componentDidUpdate so schnell nach dem componentWillReceiveProps aufgerufen wird, dass ich die Änderung der Hintergrundfarbe nicht sehen kann. – user1803361
Dies hängt von Ihren CSS-Einstellungen ab. Aktualisierte Antwort – wintvelt
Danke für die Antwort. Aber was passiert ist 1) componentWillReceiveProps wird aufgerufen und die "fancy-flash-class-in" -Klasse wird gesetzt. (Render wird aufgerufen) 2) noch bevor dieser Übergang abgeschlossen ist, heißt ComponentDidUpdate, den Zustand zurück auf "fancy-flash-class-out" zu setzen (Render erneut aufgerufen). so ist der finale affekt ich sehe immer grau. – user1803361