Final project - Dev19
9859 ワード
1分間のプレビューを実行
完了した論理をプロジェクトに適用しましょう.
サイドバーの音源を1分だけ再生するには、オーディオオブジェクトにアクセスする必要があります.
react-h 5-audio-playerはモジュールなのでdivラベルで包まれているのがモジュールです.
react-h 5-audioplayerのnpm公式ドキュメントは、モジュールを高度な用途に使用します.
classコンポーネントでDom要素アクセスを使用します.
useRef
userefは以前にもブログを書いたことがありますが、今から見てみましょう.
これはreactからDOM要素にアクセスできるHookです.
これにより、react-h 5-audio-playerの参照が最初に指定され、隠されたaudioオブジェクトにアクセスし、適用に成功します.
autoPlayAfterSrcChange
1分間の予聴を実施する過程で、予想外の状況が発見された.
非ログインでログインすると、データベースに格納されているプレイリストが有効になります.
src値がプレイリストの最後の曲の値に変更されるため、ログインすると音楽が自動的に再生されます.
npmの公式文書を読み直すと、AutoPlayAfterSrChangeというプロパティがあります.
これは音楽が変わると自動的に再生される属性です.
(以前は、srcが変更されると自動的に音源が再生されていました.)
これは保持されているはずですが、プレイリストが最初に適用された場合は適用されません.
このプロパティは、userEffectでプレイリストを受信する前にfalseのままにしてください.
オーディオ再生時にこの状態をtrueに変更することを解決しました.
afterRenderというステータスのプロパティ値を設定し、変更しました. const [afterRender, setAfterRender] = useState(false);
useEffect(() => {
audio.current.audio.current.onplay = () => {
setAfterRender(true);
play1min();
};
audio.current.audio.current.onpause = () => {
play1min();
};
setAfterRender(false);
if (isLogin) {
axios.get(`${process.env.REACT_APP_API_URL}/playlist`, { headers: { accesstoken: accessToken } })
.then(res => {
if (res.status === 200) {
dispatch(inputPlayList(res.data.playlist));
if (res.data.playlist.length > 0) {
setCurrentMusic(res.data.playlist[res.data.playlist.length - 1]);
}
}
})
.catch(err => {
if (err.response) {
if (err.response.status === 404) {
dispatch(inputPlayList([]));
}
} else console.log(err);
});
} else {
setCurrentMusic(playList[playList.length - 1]);
}
}, [isLogin]);
<AudioPlayer
...
autoPlayAfterSrcChange={afterRender}
/>
今日はここまで。
プロジェクトに当てはまる部分では心配ですが、研究を続けていけば解決策があると思います.
これからも心配よりも深く調べていくという気持ちで臨みます.
Reference
この問題について(Final project - Dev19), 我々は、より多くの情報をここで見つけました
https://velog.io/@woals3000/Final-project-Dev19
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
const [afterRender, setAfterRender] = useState(false);
useEffect(() => {
audio.current.audio.current.onplay = () => {
setAfterRender(true);
play1min();
};
audio.current.audio.current.onpause = () => {
play1min();
};
setAfterRender(false);
if (isLogin) {
axios.get(`${process.env.REACT_APP_API_URL}/playlist`, { headers: { accesstoken: accessToken } })
.then(res => {
if (res.status === 200) {
dispatch(inputPlayList(res.data.playlist));
if (res.data.playlist.length > 0) {
setCurrentMusic(res.data.playlist[res.data.playlist.length - 1]);
}
}
})
.catch(err => {
if (err.response) {
if (err.response.status === 404) {
dispatch(inputPlayList([]));
}
} else console.log(err);
});
} else {
setCurrentMusic(playList[playList.length - 1]);
}
}, [isLogin]);
<AudioPlayer
...
autoPlayAfterSrcChange={afterRender}
/>
プロジェクトに当てはまる部分では心配ですが、研究を続けていけば解決策があると思います.
これからも心配よりも深く調べていくという気持ちで臨みます.
Reference
この問題について(Final project - Dev19), 我々は、より多くの情報をここで見つけました https://velog.io/@woals3000/Final-project-Dev19テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol