mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
only trigger RCTContentDidAppearNotification when content appears (#43823)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43823 changelog: [internal] Notification RCTContentDidAppearNotification was posted too early in RCTSurfaceHostingProxyRootView, which does not know when views are mounted. It was also posted if no views were mounted, leading to inconsistent behaviour between Paper and Fabric. The implementation is aligned with Paper: https://github.com/facebook/react-native/blob/main/packages/react-native/React/Base/RCTRootContentView.m#L45-L55 Reviewed By: cipolleschi Differential Revision: D55640654 fbshipit-source-id: 2d7bc5afb6ba1c1e8db529ee11eac2bae2d936d6
This commit is contained in:
committed by
Facebook GitHub Bot
parent
dc83cb7a26
commit
c7d9571d6a
-3
@@ -125,9 +125,6 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : (NSCoder *)aDecoder)
|
||||
[super surface:surface didChangeStage:stage];
|
||||
if (RCTSurfaceStageIsRunning(stage)) {
|
||||
[_bridge.performanceLogger markStopForTag:RCTPLTTI];
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTContentDidAppearNotification object:self];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+22
-1
@@ -7,18 +7,22 @@
|
||||
|
||||
#import "RCTRootComponentView.h"
|
||||
|
||||
#import <React/RCTRootView.h>
|
||||
#import <react/renderer/components/root/RootComponentDescriptor.h>
|
||||
#import <react/renderer/components/root/RootProps.h>
|
||||
#import "RCTConversions.h"
|
||||
|
||||
using namespace facebook::react;
|
||||
|
||||
@implementation RCTRootComponentView
|
||||
@implementation RCTRootComponentView {
|
||||
BOOL _contentHasAppeared;
|
||||
}
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
{
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
_props = RootShadowNode::defaultSharedProps();
|
||||
_contentHasAppeared = NO;
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -26,6 +30,23 @@ using namespace facebook::react;
|
||||
|
||||
#pragma mark - RCTComponentViewProtocol
|
||||
|
||||
- (void)prepareForRecycle
|
||||
{
|
||||
[super prepareForRecycle];
|
||||
_contentHasAppeared = NO;
|
||||
}
|
||||
|
||||
- (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
|
||||
{
|
||||
[super mountChildComponentView:childComponentView index:index];
|
||||
if (!self->_contentHasAppeared) {
|
||||
self->_contentHasAppeared = YES;
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTContentDidAppearNotification object:self];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+ (ComponentDescriptorProvider)componentDescriptorProvider
|
||||
{
|
||||
return concreteComponentDescriptorProvider<RootComponentDescriptor>();
|
||||
|
||||
Reference in New Issue
Block a user