[英]stopping audio when switching pages with react router
I have the code below that plays or pauses audio within a function of react.我有下面的代码,可以在反应的 function 中播放或暂停音频。 Currently, the audio plays even when I navigate to other pages like /manage or /upload.
目前,即使我导航到 /manage 或 /upload 等其他页面,音频也会播放。 However, I want the audio to completely stop when I navigate to other pages.
但是,当我导航到其他页面时,我希望音频完全停止。
How can I do this?我怎样才能做到这一点?
codde:代码:
const [playing, setPlaying] = useState(false);
const [playingAudio, setPlayingAudio] = useState([]);
const location = useLocation();
const handleAudioPlay = (customer_id, sound_id, state) => {
var data = {
"current-user": location.state.customer_id || props.customer_id,
"customer-id": customer_id,
"sound-id": sound_id
};
/*
if(state) {
axios.post(`http://localhost:2000/files/get-temporary-url`, data).then(function(result) {
var audio = new Audio(result.data)
audio.crossOrigin = 'anonymous';
setPlayingAudio(audio)
if(playing) {
audio.pause()
}
else {
audio.play()
setPlaying(true)
audio.addEventListener('ended', function() {
setPlaying(false)
}, false);
}
});;
*/
if(state) {
axios.post(`/files/get-temporary-url`, data).then(function(result) {
var audio = new Audio(result.data)
audio.crossOrigin = "anonymous";
setPlayingAudio(audio)
if(playing) {
audio.pause()
}
else {
audio.play()
setPlaying(true)
audio.addEventListener('ended', function() {
setPlaying(false)
}, false);
}
});;
}
else {
playingAudio.pause()
setPlaying(false)
}
}
I think you could use an useEffect
hook to pause the audio and unsubscribe any event listeners when the component unmounts.我认为您可以使用
useEffect
挂钩在组件卸载时暂停音频并取消订阅任何事件侦听器。
Use a mounting useEffect
hook that returns a cleanup function to be run when the component unmounts.使用安装
useEffect
挂钩,该挂钩返回清理 function 以在组件卸载时运行。
Example:例子:
const [playing, setPlaying] = useState(false);
const [playingAudio, setPlayingAudio] = useState([]);
const location = useLocation();
const handldEnded = () => setPlaying(false);
const handleAudioPlay = (customer_id, sound_id, state) => {
const data = {
"current-user": location.state.customer_id || props.customer_id,
"customer-id": customer_id,
"sound-id": sound_id
};
if (state) {
axios.post(`/files/get-temporary-url`, data).then(function(result) {
const audio = new Audio(result.data);
audio.crossOrigin = "anonymous";
setPlayingAudio(audio);
if (playing) {
audio.pause();
} else {
audio.play();
setPlaying(true);
audio.addEventListener('ended', handldEnded, false);
}
});
} else {
playingAudio.pause();
setPlaying(false);
}
};
useEffect(() => {
return () => {
playingAudio.removeEventListener("ended", handldEnded, false);
playingAudio.pause();
};
}, []);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.