2016-05-25 9 views

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

+0

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

+0

Dies hängt von Ihren CSS-Einstellungen ab. Aktualisierte Antwort – wintvelt

+0

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