В вашем заголовке упоминается Redux, но я не вижу, чтобы ваш код использовал его.С Redux вы можете получить access_token и затем сохранить его в состоянии.Это позволит вам использовать его в любом подключенном компоненте Redux.
Кроме того, с Redux вы можете использовать промежуточное ПО Redux Thunk (или подобное), которое позволит вам использовать действия Redux для вызоваAPI.Тогда вы просто запишите различные вызовы API как действия Redux, которые позволят вам вызывать их из любого компонента, и результаты будут добавлены в ваше хранилище Redux (которое, опять же, может использоваться в любом подключенном компоненте Redux).
Так, например, ваша функция getNowPlaying()
может быть действием, похожим на это:
function getNowPlaying() {
return function (dispatch, getState) {
// get the token and init the api
const access_token = getState().spotify.access_token
spotifyWebApi.setAccessToken(access_token)
return spotifyWebApi.getMyCurrentPlaybackState().then((response) => {
dispatch({
type: 'SET_NOW_PLAYING',
name: response.item.name,
image: response.item.album.images[0].url
})
})
}
}
Примечание: вам нужно будет настроить редуктор Redux для«spotify» (или как вы хотите структурировать свой магазин), чтобы хранить необходимые данные.
Итак, вы можете затем вызвать getNowPlaying () из любого компонента.Он сохраняет результаты в хранилище приставок, которое вы также можете использовать из любого подключенного компонента.И вы можете использовать ту же технику получения access_token из хранилища, когда это необходимо в действиях.
В качестве альтернативы, если вы не хотите использовать Redux, вы можете предоставить значения контекста для всех дочерних компонентов, используя Контекст реагирования функции.Вы можете сделать это с помощью токена, который понадобится каждому компоненту в вашей настройке.Но Redux, на мой взгляд, лучший вариант для вас здесь.