Скорее всего, это проблема жизненного цикла / состояния компонента, когда prop
, необходимые для правильной работы компонента, не гарантированно присутствуют или определяются в течение всего жизненного цикла компонентов.
Простым решением было бы применить принципы защитного программирования к вашему getFeatures()
методу:
getFeatures(spotifyToken, userId) {
/* If required props are not defined, early exit as the request
cannot be completed */
if (!spotifyToken || !userId) {
return;
}
/* The required props are present so attempt network request */
var headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': true,
Authorization: `Bearer ${window.localStorage.authToken}`
}
const url = `${process.env.REACT_APP_WEB_SERVICE_URL}/features/${userId}/${spotifyToken}`;
axios.post(url, data, {
headers: headers
})
.then((res) => {
console.log(data);
})
.catch((err) => {
console.error(err);
});
}
componentDidUpdate(prevProps) {
const { spotify_token, userId } = this.props;
if(prevProps.spotify_token !== spotify_token || prevProps.userId !== userId) {
/* If a change occurred in token or user id, attempt to get
features */
this.getFeatures(spotify_token, userId);
}
}
Эти изменения означают, что как только все необходимые данные prop
будут присутствовать, ваш сетевой запрос будет быть выполненным.
Если, например, реквизиты spotify_token
и userId
будут предоставлены позднее (ie после взаимодействия с пользователем, например, нажатием кнопки), то будет вызван метод componentDidUpdate()
и сетевой запрос будет выполнен.
Надеюсь, это поможет!