Files
react-native/React/Base/RCTConstants.m
T
Samuel Susla 0ee8e292a4 Fix for ScrollView race condition between C++ state update and onScroll
Summary:
Changelog: [internal]

There is a possibility of race between updating scrollview's state and virtualised list asking for layout of individual cells.
To make sure the race doesn't happen, state must be updated before dispatching onScroll event.

Android has implemented a different mechanism to tackle this issue in D28558380 (https://github.com/facebook/react-native/commit/b161241db2ef74d2e4bff36d4972f5f0312dcc44).

Reviewed By: JoshuaGross

Differential Revision: D28642737

fbshipit-source-id: 33874beac69fc5a66eeb7f459fd89cd0b00dafcf
2021-05-26 03:32:03 -07:00

72 lines
1.6 KiB
Objective-C

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "RCTConstants.h"
NSString *const RCTUserInterfaceStyleDidChangeNotification = @"RCTUserInterfaceStyleDidChangeNotification";
NSString *const RCTUserInterfaceStyleDidChangeNotificationTraitCollectionKey = @"traitCollection";
/*
* On-demand view mounting
*/
static BOOL RCTExperimentOnDemandViewMounting = NO;
BOOL RCTExperimentGetOnDemandViewMounting()
{
return RCTExperimentOnDemandViewMounting;
}
void RCTExperimentSetOnDemandViewMounting(BOOL value)
{
RCTExperimentOnDemandViewMounting = value;
}
/*
* Send scroll events to Paper.
*/
static BOOL RCTExperimentSendScrollEventToPaper = YES;
BOOL RCTExperimentGetSendScrollEventToPaper()
{
return RCTExperimentSendScrollEventToPaper;
}
void RCTExperimentSetSendScrollEventToPaper(BOOL value)
{
RCTExperimentSendScrollEventToPaper = value;
}
/*
* Enable fix for data race between state and scroll event.
*/
static BOOL RCTExperimentScrollViewEventRaceFix = NO;
BOOL RCTExperimentGetScrollViewEventRaceFix()
{
return RCTExperimentScrollViewEventRaceFix;
}
void RCTExperimentSetScrollViewEventRaceFix(BOOL value)
{
RCTExperimentScrollViewEventRaceFix = value;
}
/*
* Preemptive View Allocation
*/
static BOOL RCTExperimentPreemptiveViewAllocationDisabled = NO;
BOOL RCTExperimentGetPreemptiveViewAllocationDisabled()
{
return RCTExperimentPreemptiveViewAllocationDisabled;
}
void RCTExperimentSetPreemptiveViewAllocationDisabled(BOOL value)
{
RCTExperimentPreemptiveViewAllocationDisabled = value;
}