drop scopes in order when dropping the virtual dom
This commit is contained in:
1 parent
94c0c2e5b9
commit
c172914b21
2 files changed
+7
-3
No files matched your search
@@ -64,7 +64,7 @@ impl VirtualDom {
|
|||||||
self.elements.try_remove(el.0).map(|_| ())
|
self.elements.try_remove(el.0).map(|_| ())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop a scope and all its children
|
// Drop a scope without dropping its children
|
||||||
//
|
//
|
||||||
// Note: This will not remove any ids from the arena
|
// Note: This will not remove any ids from the arena
|
||||||
pub(crate) fn drop_scope(&mut self, id: ScopeId) {
|
pub(crate) fn drop_scope(&mut self, id: ScopeId) {
|
||||||
|
|||||||
@@ -762,7 +762,11 @@ impl VirtualDom {
|
|||||||
|
|
||||||
impl Drop for VirtualDom {
|
impl Drop for VirtualDom {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
// Simply drop this scope which drops all of its children
|
// Drop all scopes in order of height
|
||||||
self.drop_scope(ScopeId::ROOT);
|
let mut scopes = self.scopes.drain().collect::<Vec<_>>();
|
||||||
|
scopes.sort_by_key(|scope| scope.context().height);
|
||||||
|
for scope in scopes.into_iter().rev() {
|
||||||
|
drop(scope);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user