Skip to content

Commit e46ea8c

Browse files
sherginfacebook-github-bot
authored andcommitted
Refined -[RCTUIManager createView:]
Summary: Now we do not add newly created view to the registry at the preluminary step. Reviewed By: mmmulani Differential Revision: D6641403 fbshipit-source-id: c69077aaba871f3cdb3500c75e1efe07546e1b7f
1 parent c491b22 commit e46ea8c

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

React/Modules/RCTUIManager.m

+9-11
Original file line numberDiff line numberDiff line change
@@ -967,21 +967,19 @@ - (void)_manageChildren:(NSNumber *)containerTag
967967

968968
// Dispatch view creation directly to the main thread instead of adding to
969969
// UIBlocks array. This way, it doesn't get deferred until after layout.
970-
__weak RCTUIManager *weakManager = self;
970+
__block UIView *preliminaryCreatedView;
971+
971972
RCTExecuteOnMainQueue(^{
972-
RCTUIManager *uiManager = weakManager;
973-
if (!uiManager) {
973+
preliminaryCreatedView = [componentData createViewWithTag:reactTag];
974+
});
975+
976+
[self addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
977+
if (!preliminaryCreatedView) {
974978
return;
975979
}
976-
UIView *view = [componentData createViewWithTag:reactTag];
977-
if (view) {
978-
uiManager->_viewRegistry[reactTag] = view;
979-
}
980-
});
981980

982-
[self addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
983-
UIView *view = viewRegistry[reactTag];
984-
[componentData setProps:props forView:view];
981+
uiManager->_viewRegistry[reactTag] = preliminaryCreatedView;
982+
[componentData setProps:props forView:preliminaryCreatedView];
985983
}];
986984

987985
[self _shadowView:shadowView didReceiveUpdatedProps:[props allKeys]];

0 commit comments

Comments
 (0)