问题描述
我正在尝试在我的react应用程序中实现Spotify播放器SDK。但是我不知道这给我一个错误,即Spotify未定义。我正在尝试在此上下文文件的useEffect
挂钩中实现脚本。
这是我的上下文文件,正在尝试在其中设置播放器SDK。预先感谢。
import React,{ createContext,useState,useEffect } from 'react'
import { myPlaylist,fetchAnything } from "../../api-fetching/api-fetching"
// Get the hash of the url
const hash = window.location.hash
.substring(1)
.split("&")
.reduce(function(initial,item) {
if (item) {
var parts = item.split("=");
initial[parts[0]] = decodeURIComponent(parts[1]);
}
return initial;
},{});
window.location.hash = "";
export const MainContext = createContext();
const MainContextProvider = (props) => {
const authEndPoint = 'https://accounts.spotify.com/authorize?';
// Replace with your app's client ID,redirect URI and desired scopes
const clientId = "5c4e46e8acf24w794ru325qi535fw5325hsakf22be91378ff14";
let redirectUri = "";
if(process.env.NODE_ENV === "development") {
redirectUri += "http://localhost:3000/";
}
const scopes = [
"streaming","user-read-email","user-read-private","user-read-currently-playing","user-read-playback-state","user-library-read","playlist-read-collaborative","playlist-read-private"
];
const [token,setToken] = useState(null);
const [scriptLoading,setScriptLoading] = useState(true);
const [currentUser,setCurrentUser] = useState(null);
const [discover,setDiscover] = useState(null);
const [discoverPlaylist,setDiscoverPlaylist] = useState(null);
const [discoverPlaylistTracks,setDiscoverPlaylistTracks] = useState(null);
const [userPlaylist,setUserPlaylist] = useState(null);
const [ userPlaylistTracks,setUserPlaylistTracks] = useState(null);
const [artistInfo,setArtistInfo] = useState(null);
const [albumTracks,setAlbumTracks] = useState(null);
const [newReleases,setNewReleases] = useState(null);
const [newReleasesTracks,setNewReleasesTracks] = useState(null);
const [searchResult,setSearchResult] = useState(null);
const [searchValue,setSearchValue] = useState("");
const [playlistTracks,setPlaylistTracks] = useState(null);
useEffect(() => {
let _token = hash.access_token;
setToken(_token);
fetchAnything(token,"https://api.spotify.com/v1/me",setCurrentUser);
if(scriptLoading){
const script = document.createElement("script");
script.src = "https://sdk.scdn.co/spotify-player.js";
script.async = true;
script.defer = true;
document.body.appendChild(script);
setScriptLoading(false);
}
window.onSpotifyWebPlaybackSDKReady = () => {
const player = new Spotify.Player({
name: 'Web Playback SDK Quick Start Player',getOAuthToken: cb => { cb(token); }
});
// Error handling
player.addListener('initialization_error',({ message }) => { console.error(message); });
player.addListener('authentication_error',({ message }) => { console.error(message); });
player.addListener('account_error',({ message }) => { console.error(message); });
player.addListener('playback_error',({ message }) => { console.error(message); });
// Playback status updates
player.addListener('player_state_changed',state => { console.log(state); });
// Ready
player.addListener('ready',({ device_id }) => {
console.log('Ready with Device ID',device_id);
});
// Not Ready
player.addListener('not_ready',({ device_id }) => {
console.log('Device ID has gone offline',device_id);
});
// Connect to the player!
player.connect();
};
},[token])
useEffect(() => {
if(currentUser){
myPlaylist(token,setUserPlaylist,currentUser.id);
}
},[currentUser,token])
return (
<MainContext.Provider
value={{ currentUser,playlistTracks,setPlaylistTracks,searchValue,setSearchValue,searchResult,setSearchResult,newReleasesTracks,setNewReleasesTracks,newReleases,setNewReleases,albumTracks,setAlbumTracks,artistInfo,setArtistInfo,discoverPlaylistTracks,setDiscoverPlaylistTracks,userPlaylistTracks,setUserPlaylistTracks,userPlaylist,discoverPlaylist,setDiscoverPlaylist,discover,setDiscover,token,setToken,authEndPoint,clientId,redirectUri,scopes }}>
{props.children}
</MainContext.Provider>
)
}
export default MainContextProvider
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)