2016-10-26 10 views
0

Ich benutze reagieren (V0.13.3), Flussmittel (V2.0.3)Reagieren Js Leistung

Ich habe eine Komponente, die viele innere Komponenten hat.

Während die innere Komponente aktualisiert wird, geht der Browser aus. Ich kann nicht scrollen klicken und irgendwann bekomme ich ein Pop-up-Sprichwort:

nicht reagierende Skript möchten Sie aufhören.

Ich befolge alle React Lifecycle-Methoden und implementiere die -Methode.

Ich denke, das DOM Diffing ist so viel CPU-Zeit und RAM für den Browser reserviert.

Irgendeine Idee darüber, warum ich dieses Problem habe und wie ich herauskommen könnte?

+0

Haben Sie große Berechnungen in inneren Komponenten wie lange Schleifen oder "während"? – Grievoushead

+0

Sie können auch Chrome Profiler ausprobieren, um zu sehen, welche Funktion alle Thread-Ressourcen verbrauchen. https://developers.google.com/web/tools/chrome-devtools/rending-tools/js-execution – Grievoushead

+0

Haben Sie nicht so viele Schleifen .. Erste Render war so schön ..... Problem existiert nur, wenn es nur aktualisiert wird –

Antwort

0

Reactjs können problemlos in endlose Renderzyklen gehen. Nehmen wir an, Sie fügen eine Methode ein, die Daten vom Server in componentDidUpdate abruft und den Reduzierer mutiert, der von einer übergeordneten Komponente verwendet wird. Boom. Der Komponentenbaum wird neu gerendert. Ihr shouldComponentUpdate kann nutzlos sein, da die Eingabe nicht dieselbe Referenz ist. Und der Server wird wieder getroffen. Endlosschleife.

Die Lösung besteht darin, Schutzvorrichtungen zu verwenden. Wenn Sie Ihre Methode componentDidUpdate (oder wo auch immer Sie das Backoffice treffen) zum ersten Mal treffen, sollte die Methode, die den Reducer mutiert, eine Art IsLoading-Variable auf dem Reducer setzen. Sie überprüfen diese Variable, um zu sehen, ob Sie Ihre Mutationsanforderung erneut auslösen sollten. Dies schützt vor unnötigen Wiederholungen