From bb7c8280a686cfc506d48889df5274d85bb9c6eb Mon Sep 17 00:00:00 2001 From: Justin Starry Date: Sun, 1 Mar 2020 19:16:04 +0800 Subject: [PATCH] Fix double node removal (#983) * Fix double node removal * Fix clippy --- src/virtual_dom/vcomp.rs | 10 ++-------- src/virtual_dom/vnode.rs | 7 ++++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/virtual_dom/vcomp.rs b/src/virtual_dom/vcomp.rs index 862860edb..8d60b5e3e 100644 --- a/src/virtual_dom/vcomp.rs +++ b/src/virtual_dom/vcomp.rs @@ -161,19 +161,13 @@ enum Reform { } impl VDiff for VComp { - fn detach(&mut self, parent: &Element) -> Option { + fn detach(&mut self, _parent: &Element) -> Option { let mut replace_state = MountState::Detached; swap(&mut replace_state, &mut self.state); match replace_state { MountState::Mounted(this) => { (this.destroyer)(); - this.node_ref.get().and_then(|node| { - let next_sibling = node.next_sibling(); - parent - .remove_child(&node) - .expect("can't remove the component"); - next_sibling - }) + this.node_ref.get().and_then(|node| node.next_sibling()) } _ => None, } diff --git a/src/virtual_dom/vnode.rs b/src/virtual_dom/vnode.rs index b4e712601..e199446c3 100644 --- a/src/virtual_dom/vnode.rs +++ b/src/virtual_dom/vnode.rs @@ -3,6 +3,7 @@ use super::{VChild, VComp, VDiff, VList, VTag, VText}; use crate::html::{Component, Renderable}; use cfg_if::cfg_if; +use log::warn; use std::cmp::PartialEq; use std::fmt; use std::iter::FromIterator; @@ -39,9 +40,9 @@ impl VDiff for VNode { VNode::VList(ref mut vlist) => vlist.detach(parent), VNode::VRef(ref node) => { let sibling = node.next_sibling(); - parent - .remove_child(node) - .expect("can't remove node by VRef"); + if parent.remove_child(node).is_err() { + warn!("Node not found to remove VRef"); + } sibling } }