diff --git a/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp b/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp index cc783e2824a..11352bb9d23 100644 --- a/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +++ b/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp @@ -445,7 +445,9 @@ YGNode *YogaLayoutableShadowNode::yogaNodeCloneCallbackConnector( auto oldNode = static_cast(oldYogaNode->getContext()); - auto clonedNode = oldNode->clone({}); + auto clonedNode = oldNode->clone({ShadowNodeFragment::propsPlaceholder(), + ShadowNodeFragment::childrenPlaceholder(), + oldNode->getState()}); parentNode->replaceChild(*oldNode, clonedNode, childIndex); return &static_cast(*clonedNode).yogaNode_; } diff --git a/ReactCommon/react/renderer/core/ConcreteShadowNode.h b/ReactCommon/react/renderer/core/ConcreteShadowNode.h index e2c601a8858..e6b842f3c82 100644 --- a/ReactCommon/react/renderer/core/ConcreteShadowNode.h +++ b/ReactCommon/react/renderer/core/ConcreteShadowNode.h @@ -134,7 +134,6 @@ class ConcreteShadowNode : public BaseShadowNodeT { Sealable::ensureUnsealed(); state_ = std::make_shared( std::make_shared(std::move(data)), *state_); - BaseShadowNodeT::getFamily().setMostRecentState(state_); } }; diff --git a/ReactCommon/react/renderer/core/tests/ConcreteShadowNodeTest.cpp b/ReactCommon/react/renderer/core/tests/ConcreteShadowNodeTest.cpp index 44d2ad76783..de48a4b6e7b 100644 --- a/ReactCommon/react/renderer/core/tests/ConcreteShadowNodeTest.cpp +++ b/ReactCommon/react/renderer/core/tests/ConcreteShadowNodeTest.cpp @@ -28,6 +28,11 @@ TEST(ConcreteShadowNodeTest, testSetStateData) { shadowNode->setStateData({{10, 11}, {{21, 22}, {301, 302}}}); + EXPECT_NE( + shadowNode->getState(), shadowNode->getFamily().getMostRecentState()); + + shadowNode->setMounted(true); + EXPECT_EQ( shadowNode->getState(), shadowNode->getFamily().getMostRecentState());