@@ -4,55 +4,29 @@ import { Icon, Tooltip } from '@blueprintjs/core'
44import ProgressBar from 'components/ProgressBar'
55import Artists from 'components/Artists'
66import AudioTimer from 'components/AudioTimer'
7- import { PlayMusicStateContext , PlayMusicDispatchContext , ACTIONS } from 'reducers/playMusic'
8- import { getMusicUrl } from 'helpers/business'
7+ import { PlayMusicStateContext , AudioContext } from 'reducers/playMusic'
98import styles from './style.module.css'
109
11- const { useEffect , useContext, useRef , useState } = React
10+ const { useContext } = React
1211
1312const Footer = ( ) => {
14- const [ audio , setAudio ] = useState < HTMLAudioElement > ( )
15- const dispatch = useContext ( PlayMusicDispatchContext )
13+ const audioInfo = useContext ( AudioContext )
1614 const state = useContext ( PlayMusicStateContext )
17- const { musicId, music, isPlaying } = state
18-
19- // useRef doesn’t notify you when its content changes. Mutating the .current property doesn’t cause a re-render.
20- // 所以添加了一个 audio state 来触发变化
21- const audioRef = useRef < HTMLAudioElement > ( )
22-
23- useEffect ( ( ) => {
24- if ( musicId === 0 ) {
25- return
26- }
27-
28- const musicUrl = getMusicUrl ( musicId )
29- if ( ! audioRef . current ) {
30- audioRef . current = new Audio ( musicUrl )
31- } else {
32- audioRef . current . src = musicUrl
33- audioRef . current . pause ( )
34- audioRef . current . currentTime = 0
35- }
36-
37- setAudio ( audioRef . current )
38- audioRef . current . play ( )
39- } , [ musicId ] )
15+ const { musicId, music } = state
4016
4117 const togglePlayStatus = ( ) => {
42- if ( isPlaying ) {
43- audioRef . current ?. pause ( )
18+ if ( audioInfo . state ?. paused ) {
19+ audioInfo . controls ?. play ( )
4420 } else {
45- audioRef . current ?. play ( )
21+ audioInfo . controls ?. pause ( )
4622 }
47-
48- dispatch ( { type : ACTIONS . TOGGLE_PLAY_STATUS } )
4923 }
5024
5125 return (
5226 < div className = { styles . root } >
5327 { musicId ? (
5428 < div className = { styles . progressBar } >
55- < ProgressBar audio = { audio } />
29+ < ProgressBar />
5630 </ div >
5731 ) : null }
5832
@@ -64,7 +38,7 @@ const Footer = () => {
6438 < Artists artists = { state ?. music ?. song ?. artists } />
6539 </ div >
6640 < div className = { styles . time } >
67- < AudioTimer audio = { audio } />
41+ < AudioTimer />
6842 </ div >
6943 </ div >
7044 </ div >
@@ -74,7 +48,7 @@ const Footer = () => {
7448 < Icon icon = 'step-backward' />
7549 </ div >
7650 < div className = { styles . pause } onClick = { togglePlayStatus } >
77- < Icon icon = { isPlaying ? 'pause ' : 'play ' } />
51+ < Icon icon = { audioInfo . state ?. paused ? 'play ' : 'pause ' } />
7852 </ div >
7953 < div className = { styles . next } >
8054 < Icon icon = 'step-forward' />
0 commit comments