diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm index 64b09228a39..86f3f578a7a 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm @@ -37,16 +37,20 @@ using namespace facebook::react; self.hidden = YES; _props = PullToRefreshViewShadowNode::defaultSharedProps(); - - _refreshControl = [UIRefreshControl new]; - [_refreshControl addTarget:self - action:@selector(handleUIControlEventValueChanged) - forControlEvents:UIControlEventValueChanged]; + [self _initializeUIRefreshControl]; } return self; } +- (void)_initializeUIRefreshControl +{ + _refreshControl = [UIRefreshControl new]; + [_refreshControl addTarget:self + action:@selector(handleUIControlEventValueChanged) + forControlEvents:UIControlEventValueChanged]; +} + #pragma mark - RCTComponentViewProtocol + (ComponentDescriptorProvider)componentDescriptorProvider @@ -54,6 +58,13 @@ using namespace facebook::react; return concreteComponentDescriptorProvider(); } +- (void)prepareForRecycle +{ + [super prepareForRecycle]; + _scrollViewComponentView = nil; + [self _initializeUIRefreshControl]; +} + - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps { const auto &oldConcreteProps = static_cast(*_props); @@ -113,6 +124,7 @@ using namespace facebook::react; - (void)didMoveToWindow { + [super didMoveToWindow]; if (self.window) { [self _attach]; } else {