2016-07-29 27 views
1

hören Wenn ich fünf Komponenten auf einer Seite habe, die etwas aus einem Geschäft bekommen können. Sie alle hören einem einzigen Laden zu. Für alle Komponenten erstelle ich Listener in einem Geschäft.einen Speicher vs forceUpdate()

Meine Frage ist - Kann ich forceUpdate() anstelle von Listener verwenden. Senden Sie etwas in einem Geschäft und warten Update:

getInitialState: function() { 
    return {val: Store.getFoo}; 
}, 
click: function(info) { 
    Store.updateInfo(info, function() { 
    this.forceUpdate(); 
    }) 
} 

Im Shop:

updateInfo: function(info, callback) { 
    foo = info + someValue; 
    callback() 
} 

Aber in der Dokumentation:

Normalerweise sollten Sie versuchen, alle Verwendungen von Forceupdate zu vermeiden() und Lies nur von this.props und this.state in render(). Dies macht Ihre Anwendung viel einfacher und effizienter

Vielen Dank.

Antwort

1

Sie können ForceUpdate verwenden, aber Sie sollten nicht.

Ihr aktueller Ansatz ist korrekt (nicht mit forceUpdate).

Wenn Sie ein gemeinsames übergeordnetes dieser fünf Benutzer haben, auf Änderungen warten und Daten an die untergeordneten Elemente weiterleiten, wird der übergeordnete Code aufgebläht und Sie haben 6 Komponenten (übergeordnete, 5 untergeordnete) rendern, wenn sich der Informationsspeicher ändert. Wenn mehr dieser "Container" -Komponenten vorhanden sind, die den Speicher abhören, wird die Isolation zwischen den Komponenten erhöht ("unabhängige untergeordnete Elemente") und ist leistungsfähiger, da weniger Komponenten beim Aktualisieren des Speichers neu gerendert werden. Stellen Sie sicher, dass Sie auch somethingComponentUpdate verwenden.

Wenn Sie mehr über „unabhängige Kinder“ lernen möchten und höherer Leistung reagieren, Uhr: https://www.youtube.com/watch?v=KYzlpRvWZ6c

+0

bekam es, danke! – nick

+0

Manchmal ist 'shouldComponentUpdate' eine Nervensäge, wenn eine Komponente ein Objekt mit> 10 Eigenschaften wartet und nur eines ändern kann. – nick

+0

Ich frage mich auch, warum ich nicht sollte? Ich kann Variable aus dem Speicher in 'render' erhalten - 'let var = Store.getVar(); '. Wenn ich 'var' in einem Geschäft ändere, kann ich' forceUpdate() 'tun. Ich kann es auch mit "unabhängigen Kindern" machen. "ForceUpdate" rendert Kinder nicht neu, wenn ich keine neuen Requisiten sende. Weniger Code, ich brauche keine Variable in 'state', nur in einem Geschäft – nick