Permalink
Browse files

reactBridgeDidFinishTransaction was removed from RCTTabBar

Summary:
We are removing `reactBridgeDidFinishTransaction`.
Why?
 * It is a performance drain. Supporting this requires dispatching main-thread block on every single transaction complete;
 * It has "too broad" non-conceptual semantic which encouraged using this as a "band-aid solution" for poorly designed components;
 * It is conceptually incompatible with new approaches that we are trying to implement to optimize the render layer;
 * It was deprecated for very long time.

This diff replaces usage of `reactBridgeDidFinishTransaction` with `uiManagerDidPerformMounting` which has very similar semantic except that fact that `uiManagerDidPerformMounting` is called asynchronously on the next run loop tick. And this should be okay because new React partial rendering does not guarantee synchronous execution anyways.

Reviewed By: mmmulani

Differential Revision: D6549586

fbshipit-source-id: 589b814f83b91ed8fabf7e638e7554ab3c9d286e
  • Loading branch information...
shergin authored and facebook-github-bot committed Dec 18, 2017
1 parent 099b280 commit b263560c73af5559fdc3bba411f16c588abbffef
Showing with 44 additions and 3 deletions.
  1. +2 −0 React/Views/RCTTabBar.h
  2. +2 −2 React/Views/RCTTabBar.m
  3. +40 −1 React/Views/RCTTabBarManager.m
@@ -19,4 +19,6 @@
@property (nonatomic, assign) UIBarStyle barStyle;
#endif
- (void)uiManagerDidPerformMounting;
@end
@@ -73,7 +73,7 @@ - (void)removeReactSubview:(RCTTabBarItem *)subview
- (void)didUpdateReactSubviews
{
// Do nothing, as subviews are managed by `reactBridgeDidFinishTransaction`
// Do nothing, as subviews are managed by `uiManagerDidPerformMounting`
}
- (void)layoutSubviews
@@ -83,7 +83,7 @@ - (void)layoutSubviews
_tabController.view.frame = self.bounds;
}
- (void)reactBridgeDidFinishTransaction
- (void)uiManagerDidPerformMounting
{
// we can't hook up the VC hierarchy in 'init' because the subviews aren't
// hooked up yet, so we do it on demand here whenever a transaction has finished
@@ -11,6 +11,8 @@
#import "RCTBridge.h"
#import "RCTTabBar.h"
#import "RCTUIManager.h"
#import "RCTUIManagerObserverCoordinator.h"
@implementation RCTConvert (UITabBar)
@@ -22,13 +24,39 @@ @implementation RCTConvert (UITabBar)
@end
@interface RCTTabBarManager () <RCTUIManagerObserver>
@end
@implementation RCTTabBarManager
{
// The main thread only.
NSHashTable<RCTTabBar *> *_viewRegistry;
}
- (void)setBridge:(RCTBridge *)bridge
{
[super setBridge:bridge];
[self.bridge.uiManager.observerCoordinator addObserver:self];
}
- (void)invalidate
{
[self.bridge.uiManager.observerCoordinator removeObserver:self];
}
RCT_EXPORT_MODULE()
- (UIView *)view
{
return [RCTTabBar new];
if (!_viewRegistry) {
_viewRegistry = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory];
}
RCTTabBar *view = [RCTTabBar new];
[_viewRegistry addObject:view];
return view;
}
RCT_EXPORT_VIEW_PROPERTY(unselectedTintColor, UIColor)
@@ -41,4 +69,15 @@ - (UIView *)view
RCT_EXPORT_VIEW_PROPERTY(itemPositioning, UITabBarItemPositioning)
RCT_EXPORT_VIEW_PROPERTY(unselectedItemTintColor, UIColor)
#pragma mark - RCTUIManagerObserver
- (void)uiManagerDidPerformMounting:(__unused RCTUIManager *)manager
{
RCTExecuteOnMainQueue(^{
for (RCTTabBar *view in self->_viewRegistry) {
[view uiManagerDidPerformMounting];
}
});
}
@end

0 comments on commit b263560

Please sign in to comment.