diff --git a/ReactCommon/fabric/view/ViewShadowNode.cpp b/ReactCommon/fabric/view/ViewShadowNode.cpp index 8bb5f33fdb8..2418279903e 100644 --- a/ReactCommon/fabric/view/ViewShadowNode.cpp +++ b/ReactCommon/fabric/view/ViewShadowNode.cpp @@ -92,26 +92,14 @@ SharedLayoutableShadowNodeList ViewShadowNode::getChildren() const { SharedLayoutableShadowNode ViewShadowNode::cloneAndReplaceChild(const SharedLayoutableShadowNode &child) { ensureUnsealed(); - // We cannot mutate `children_` in place here because it is a *shared* - // data structure which means other `ShadowNodes` might refer to its old value. - // So, we have to clone this and only then mutate. - auto nonConstChildrenCopy = SharedShadowNodeList(*children_); - auto viewShadowNodeChild = std::dynamic_pointer_cast(child); assert(viewShadowNodeChild); - auto viewShadowNodeChildClone = std::make_shared(viewShadowNodeChild); - - std::replace( - nonConstChildrenCopy.begin(), - nonConstChildrenCopy.end(), - std::static_pointer_cast(viewShadowNodeChild), - std::static_pointer_cast(viewShadowNodeChildClone) - ); - - children_ = std::make_shared(nonConstChildrenCopy); - + ShadowNode::replaceChild(viewShadowNodeChild, viewShadowNodeChildClone); return std::static_pointer_cast(viewShadowNodeChildClone); + + + } #pragma mark - DebugStringConvertible