Следуя примеру React AJAX, я создал файл JSX, целью которого является выборка и рендеринг фильма. Для всех, кого я знаю, я делаю все прямо здесь.React и Axios срабатывают дважды (один раз не определено, один раз успешно)
Когда я console.log данные в моей визуализации функции я получаю 2 результаты:
- Undefined
- объект (который является один мне нужно, так это один идеально)
Как я могу отфильтровать строку Undefined без выполнения какой-либо логики if/else в моей функции рендеринга? Итерация по результату, конечно же, приведет к ошибке в первый раз, что приведет к сбою моего приложения.
Каков наилучший способ справиться с этим?
EDIT: Может быть, приложение будет отображаться перед вызовом Axios, и в этом случае я вынужден сделать оператор if/else?
Heres мой JSX файл:
import React from "react";
import axios from "axios";
export default class NetflixHero extends React.Component {
constructor() {
super();
this.state = {
movie: []
}
}
}
componentDidMount() {
const apiKey = '87dfa1c669eea853da609d4968d294be';
let requestUrl = 'https://api.themoviedb.org/3/' + this.props.apiAction + '&api_key=' + apiKey;
axios.get(requestUrl).then(response => {
this.setState({movie: response.data.results})
});
}
render() {
//Fires twice. Returns Undefined and an Object
console.log(this.state.movie[0]);
return(
<div></div>
)
}
Так что мое приложение получает визуализацию до того, как мои данные будут извлечены из источника, поэтому он получает console.logged дважды? –
Каждый раз, когда состояние изменяется, будет произведена повторная реновация. В первый раз ваш компонент сконструирован с помощью this.state.movie = []. После этого запускается компонентDidMount(), который изменяет ваше состояние. Это вызывает второй метод рендеринга. – dschu
Gotcha! Добавление вышеуказанного кода действительно сработает. Спасибо, что освободил меня ;-) –