0

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

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

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

4

1 回答 1

1

在阅读https://codedaily.io/courses/Master-React-Native-Animations/Using-and-Understanding-setNativeProps中的帖子后,我通过在滚动视图上设置本机道具(我直接使用 a 引用ref)而不是更新状态,防止重新渲染:

this.state.scrollView.current?.setNativeProps({
    scrollEnabled: false
});
于 2021-04-27T18:22:26.523 回答