React и Axios срабатывает дважды (один раз неопределенный, один раз успешно)
следуя примеру React AJAX, я создал файл JSX, целью которого является извлечение и визуализация фильма. Насколько я знаю, я делаю все прямо здесь.
когда я консоль.войти в функцию render, я получаю 2 результата:
- неопределено
- объект (который мне нужен, так что этот идеальный)
Как я могу отфильтровать неопределенную строку, не выполняя логику if/else в моей функции рендеринга? Перебора результат, конечно же, приведет к ошибке в первый раз, что приведет к сбою моего приложения.
каков наилучший способ справиться с этим?
EDIT: возможно, приложение отображается до вызова Axios, и в этом случае я вынужден сделать оператор if/else?
вот мой файл 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>
)
}
1 ответов
проверьте состояние внутри метода render. При таком подходе вы можете отобразить экран загрузки:
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() {
//Loading...
if( this.state.movie[0] === undefined ) {
return <div>Loading...</div>
}
//Loaded successfully...
return(
<div> Movie loaded... [Do action here] </div>
)
}
объяснение
каждый раз при изменении состояния будет запускаться повторная визуализация. В первый раз, ваш компонент построен с этим.государство.кино.][ = После этого запускается componentDidMount (), который изменяет ваше состояние. Это запускает метод render во второй раз.