问题描述
export default (props) => {
let [soundState,setSoundState] = useState({ state: 'off' })
let [soundId,setSoundId] = useState(null)
let [soundSeek,setSoundSeek] = useState(null)
var sound = new Howl({
src: [props.url],html5: true,volume: 1,myMusicID: '',saveSeek: null,onpause: () => {
console.log('pause',soundId)
}
})
const onPlayHandle = () => {
setSoundState({ state: 'playing' })
let id = sound.play()
setSoundId(id)
sound.seek(soundSeek,soundId)
}
const onPauseHandle = () => {
console.log('onPauseHandle',soundId)
sound.pause(soundId)
setSoundSeek(sound.seek(soundId))
}
}
onpause
已触发但声音仍在运行...
请帮忙...
解决方法
每次您的组件被渲染时,都会创建一个新的 Howl
实例。您需要使用 useRef 来保留实例引用:
const soundRef = useRef(new Howl({
src: ["http://listen.vo.llnwd.net/g3/prvw/6/5/8/3/1/2255913856.mp3"],html5: true,volume: 1,myMusicID: "",saveSeek: null,onpause: () => {
console.log("pause",soundId);
}
}));
const sound = soundRef.current;