Ich arbeite an einem Projekt, das React Component in eine NON-react-Umgebung integriert.Entfernen eines DOM-Elements einer eingehängten Komponente
Das Projekt verwendet Backbone und wir migrieren langsam einige Teile der Website zu React.
Meine Frage:
Wird durch Entfernen eines DOM-Knotens (durch Backbone/Jquery) der mit der React-Komponente verbundene Speicher freigegeben?
Die Dokumentation besagt eindeutig, dass Sie Ihre eigenen Mounting/Un-Mounting verwalten müssen, aber ich frage mich, ob das Entfernen des DOM den Speicher für mich aufräumen wird, oder muss ich mich über Speicherlecks in einem langlebigen sorgen Seite?
ein Beispiel usecase navigiert (mit unserem Backbone-Router) und re-rendering die Seite, das entfernt alle vorherigen Knoten und baut neue html - Was passiert also mit allen montierten react-Komponenten?
Bearbeiten:
Um klar zu sein, ich bin nicht eine gerenderte Komponente mit jQuery ändern.
class App extends React.Component{
render(){
return (<div>Amazing</div>);
}
}
//extreme use case, render a component, remove the DOM node, create a new DOM node
setInterval(function(){
ReactDOM.render(React.createElement(App),document.getElementById('app'));
$('#app').remove();
$('body').append($('<div id="app">'));
},250)
Edit: Nachdem das Problem zu untersuchen, müssen Sie entfernten Knoten erkennen MutationObserver verwenden und aushängen ihnen, wenn Sie die Knoten im Speicher zu erbringenden nicht tun wird fortgesetzt. Ich schrieb eine vollständige Beschreibung hier:
https://medium.com/@patrick.tolosa/backbone-router-with-react-components-13791727a351
Log-KomponenteWillUnmount und es gibt die Antwort – lustoykov
Ich loggte es, es läuft nicht :) aber meine Frage ist über Speicherzuweisung und nicht nur die Lebenszyklus-Methode – Patrick