React Native ScrollView阻止/允许滚动启动事件



我有一个ScrollView(实际上是Animated.ScrollView(,我想根据内部组件的一些状态来决定在滚动开始时是否允许垂直滚动。我知道有一个scrollEnabled属性是有效的,但滚动视图包含一些组件,需要渲染的几帧和基于内部视图交互更改scrollEnabled属性会导致重新渲染,这会删除几帧,并且由于我的应用程序的性质,需要基于内部视图的一些动画/平滑滚动更改此属性,那些丢弃的帧会导致负面的用户体验。

我也尝试过滚动开始拖动事件的preventDefault,但没有任何变化(无论我是否调用它,它都允许滚动(。

我如何决定是否允许在滚动开始时动态滚动滚动视图,而不进行状态/道具更新(这会导致重新渲染昂贵的视图树,丢弃帧(?类似泛响应程序的onMoveShouldSetPanResponder[Capture]事件可能会有很大帮助,但从它们返回false是不起作用的(即使调用了它们,它也会捕获和滚动(。(我在React Native 0.64上(

在https://codedaily.io/courses/Master-React-Native-Animations/Using-and-Understanding-setNativeProps我通过在滚动视图上设置原生道具(我直接使用ref引用(而不是更新状态来解决这个问题,防止重新渲染:

this.state.scrollView.current?.setNativeProps({
scrollEnabled: false
});

最新更新