diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index e2c4f3564d6..42643810537 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -207,8 +207,7 @@ class UIManager final : public ShadowTreeDelegate { void reportMount(SurfaceId surfaceId) const; - void updateShadowTree( - const std::unordered_map& tagToProps); + void updateShadowTree(std::unordered_map&& tagToProps); #pragma mark - Add & Remove event listener diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerUpdateShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerUpdateShadowTree.cpp index 66983ff773d..2da47e6d6e9 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerUpdateShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerUpdateShadowTree.cpp @@ -86,10 +86,15 @@ void addAncestorsToUpdateList( * license). */ void UIManager::updateShadowTree( - const std::unordered_map& tagToProps) { + std::unordered_map&& tagToProps) { const auto& contextContainer = *contextContainer_; - std::unordered_map remainingTagToProps = tagToProps; + auto remainingTagToProps = std::move(tagToProps); + + if (delegate_ != nullptr) { + delegate_->uiManagerDidUpdateShadowTree(remainingTagToProps); + } + getShadowTreeRegistry().enumerate([&](const ShadowTree& shadowTree, bool& stop) { if (remainingTagToProps.empty()) { @@ -219,10 +224,6 @@ void UIManager::updateShadowTree( LOG(ERROR) << "Root ShadowNode has not been cloned"; } }); - - if (delegate_ != nullptr) { - delegate_->uiManagerDidUpdateShadowTree(tagToProps); - } } } // namespace facebook::react diff --git a/packages/react-native/ReactCxxPlatform/react/renderer/animated/MergedValueDispatcher.h b/packages/react-native/ReactCxxPlatform/react/renderer/animated/MergedValueDispatcher.h index c720fda7a8e..c0a073632ec 100644 --- a/packages/react-native/ReactCxxPlatform/react/renderer/animated/MergedValueDispatcher.h +++ b/packages/react-native/ReactCxxPlatform/react/renderer/animated/MergedValueDispatcher.h @@ -23,7 +23,7 @@ class MergedValueDispatcher { public: using DispatchFunction = std::function&&)>; using MergedValueFunction = - std::function tagToProps)>; + std::function&& tagToProps)>; /** * Creates a MergedValueDispatcher with the given dispatch function. diff --git a/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp b/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp index 4e33d8a4717..0b65a12135f 100644 --- a/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +++ b/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp @@ -49,9 +49,8 @@ NativeAnimatedNodesManagerProvider::getOrCreate( [jsInvoker](std::function&& func) { jsInvoker->invokeAsync(std::move(func)); }, - [uiManager]( - const std::unordered_map& tagToProps) { - uiManager->updateShadowTree(tagToProps); + [uiManager](std::unordered_map&& tagToProps) { + uiManager->updateShadowTree(std::move(tagToProps)); }); fabricCommitCallback =