From 19cd630f044a57f3ed652494313dece32aca1e89 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 25 Aug 2020 14:46:18 -0700 Subject: [PATCH] Clone node with state in yogaNodeCloneCallbackConnector Summary: Changelog: [Internal] Reviewed By: shergin Differential Revision: D23317682 fbshipit-source-id: c273804efbe48143dcecd7c62c4edced0a746bc6 --- .../renderer/components/view/YogaLayoutableShadowNode.cpp | 4 +++- ReactCommon/react/renderer/core/ConcreteShadowNode.h | 1 - .../react/renderer/core/tests/ConcreteShadowNodeTest.cpp | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) 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());