Реагируйте setState, если данные ответа Ax ios .get хороши - PullRequest
1 голос
/ 22 марта 2020

В настоящее время я делаю запрос ax ios и устанавливаю данные ответа в моем состоянии.

Я обнаружил, что некоторые данные имеют значение poster_path, равное нулю (Нет изображения).

Я хочу удалить эти данные перед setState в componentDidMount.

Я пробовал следующее, но вызывает ошибку.

    componentDidMount() {
        let url = "".concat(baseURL, '?api_key=', APIKEY, configData, `&with_genres=${genreID}`)
        axios.get(url)

        .then(res => 
            if (res.data.results.poster_path != null){
            this.setState({movies: res.data.results},()=>{
                console.log(this.state.movies);
            })
        }
        )}

Любая помощь очень ценится.

export class Documentary extends Component {
    constructor (props) {
        super (props) 
            this.state = {
                movies:[]
            };
    }

    componentDidMount() {
        let url = "".concat(baseURL, '?api_key=', APIKEY, configData, `&with_genres=${genreID}`)
        axios.get(url)

        .then(res => 
            this.setState({movies: res.data.results},()=>{
                console.log(this.state.movies);
            })
        )}

.....render...

Данные API выглядят следующим образом

{
  "page": 1,
  "total_results": 10000,
  "total_pages": 500,
  "results": [
    {
      "popularity": 27.169,
      "vote_count": 0,
      "video": false,
      "poster_path": "/4RtCBnCnsEqcTQejPQ1lIiCE75r.jpg",
      "id": 680438,
      "adult": false,
      "backdrop_path": "/aejCGlzSRY3nVmB23IpBiXuoXzW.jpg",
      "original_language": "en",
      "original_title": "After Truth: Disinformation and the Cost of Fake News",
      "genre_ids": [
        99
      ],
      "title": "After Truth: Disinformation and the Cost of Fake News",
      "vote_average": 0,
      "overview": "An investigation into the ongoing threat caused by the phenomenon of “fake news” in the U.S., focusing on the real-life consequences that disinformation, conspiracy theories and false news stories have on the average citizen.",
      "release_date": "2020-03-19"
    },
    {
      "popularity": 25.04,
      "vote_count": 0,
      "video": false,
      "poster_path": "/rODi66xlhEIaHs2krHlj4A8da5f.jpg",
      "id": 674334,
      "adult": false,
      "backdrop_path": "/rjtXLRO0ixmbjoQM27Rj7rFRWe9.jpg",
      "original_language": "en",
      "original_title": "Climbing Blind",
      "genre_ids": [
        99
      ],
      "title": "Climbing Blind",
      "vote_average": 0,
      "overview": "Blind climber Jesse Dufton's ascent of the Old Man of Hoy.",
      "release_date": "2020-03-20"
    },
    {
      "popularity": 24.492,
      "vote_count": 0,
      "video": false,
      "poster_path": null,
      "id": 674338,
      "adult": false,
      "backdrop_path": null,
      "original_language": "en",
      "original_title": "Amber and Me",
      "genre_ids": [
        99
      ],

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Вы можете попробовать это. Просто отфильтруйте данные mov ie перед установкой состояния.

axios.get(url)
    .then(res => {
        if (res.data) {
            const movieData = res.data.results.filter(movie => movie.poster_path != null);
            this.setState({movies: movieData}, () => {
                console.log(this.state.movies);
            });
        }
    }
1 голос
/ 22 марта 2020

Вы можете создать новый массив с помощью метода filter, чтобы удалить mov ie с poster_path из null, если это то, что вы хотите сделать.

...