【发布时间】:2019-06-27 16:39:36
【问题描述】:
我正在 React Native 中实现类似 Instagram 故事的功能,我需要在顶部实现一个进度条以指示当前故事的进度。 目前我有一个计时器,一旦故事开始播放就会开始计数:
onStart = (timeout: number, total: number) => {
const updateFrequncy = 1000 / PROGRESS_BAR_TICK;
this._timer = this.props.setInterval(() => {
this.setState(state => ({
progress:
state.progress +
(PROGRESS_BAR_SPEED * PROGRESS_BAR_RANGE * updateFrequncy) /
total,
}));
}, PROGRESS_BAR_TICK);
};
我正在将进度状态传递给进度条。 (一个 Animated.View 组件,将当前进度呈现为样式中的宽度)。 所以基本上,由于 setState,它会渲染每个 PROGRESS_BAR_TICK 毫秒。我面临的问题是 - 由于 JS 是单线程的,如果有另一个事件占用线程,或者 JS 线程在某些低端设备上很慢,进度条就会变得很垃圾。
有什么建议让它更流畅吗?
【问题讨论】:
-
JS 是单线程的,但在 RN 中,视图在单独的线程上运行,更不用说 setState 是异步的......问题可能是没有清除
setInterval(例如在 @987654323 @) 这将导致内存泄漏/减慢... -
您可以使用 gif 代替动画。这是一种解决方法,但效果很好。
标签: javascript reactjs react-native progress-bar