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
This commit is contained in:
parent
099b28006b
commit
b263560c73
|
@ -19,4 +19,6 @@
|
|||
@property (nonatomic, assign) UIBarStyle barStyle;
|
||||
#endif
|
||||
|
||||
- (void)uiManagerDidPerformMounting;
|
||||
|
||||
@end
|
||||
|
|
|
@ -73,7 +73,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder)
|
|||
|
||||
- (void)didUpdateReactSubviews
|
||||
{
|
||||
// Do nothing, as subviews are managed by `reactBridgeDidFinishTransaction`
|
||||
// Do nothing, as subviews are managed by `uiManagerDidPerformMounting`
|
||||
}
|
||||
|
||||
- (void)layoutSubviews
|
||||
|
@ -83,7 +83,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder)
|
|||
_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 @@ RCT_ENUM_CONVERTER(UITabBarItemPositioning, (@{
|
|||
|
||||
@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 @@ RCT_EXPORT_VIEW_PROPERTY(barStyle, UIBarStyle)
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue