我正在构建一个应用程序 React Native,我将一组音频文件发送到 Expo AV Audio.Sound 对象中,加载它们,播放它们,然后尝试使用有关音频文件的信息更新应用程序本身的显示正在播放(特别是用户在文件中的距离)。我正在尝试通过 useState 钩子更新显示,该钩子由音频播放器的回调函数调用。
我遇到的问题是,每当我尝试从音频播放器回调函数更改状态时,我都会陷入无限的重新渲染。简化代码如下:
import React, { useState} from 'react';
import { Audio } from 'expo-av';
const AudioPlayer = ({ user }) => {
const [currentProgress, setCurrentProgress] = useState(0);
const soundObject = new Audio.Sound();
soundObject.setOnPlaybackStatusUpdate(playbackUpdate);
// sets a function that is called every 500 milliseconds as the audio is played
if(user) {
soundObject.loadAsync({user.message.path});
}
const play = () => {
soundObject.playAsync();
}
const playbackUpdate = (playbackObject) => {
setCurrentProgress(playbackObject.currentMillis);
// updating state with progress through audio file in milliseconds
}
return (
<View>
<Text>{currentProgress}</Text>
<Button title="play" onPress={play} />
</View>
)
}
export default AudioPlayer
慕哥9229398
相关分类