简体   繁体   English

从api获取数据时在React中获取空数组

[英]Getting an empty array in React while fetching the data from the api

I'm fetching from the moviedb api and working on searching movies.我正在从 moviedb api 中获取数据并致力于搜索电影。 I've taken some reference from alligator.io tutorial.我从 alligator.io 教程中获得了一些参考。 Below is my code of the Header component where i am fetching the data.下面是我获取数据的 Header 组件的代码。

Header.js头文件.js

import React, { Component } from "react"
import { Navbar, Button, Form, FormControl } from "react-bootstrap"
import { NavLink } from "react-router-dom"
import axios from "axios"
const apiKey = process.env.REACT_APP_MOVIE_DB_API_KEY


class Header extends Component {
  state = {
    isSearching: false,
    value: "",
    movies: []
  }

  searchMovies = async val => {
    console.log("val", val)
    this.setState({ isSearching: true })
    const res = await axios(
      `https://api.themoviedb.org/3/search/movie?api_key=${apiKey}&language=en-US&query=${val}page=1&include_adult=true`
    )
    const movies = await res.data.results
    console.log(movies)
    this.setState({ movies: movies, isSearching: false })
  }

  handleChange = e => {
    const { name, value } = e.target
    this.searchMovies(value)
    this.setState({
      [name]: value
    })
  }

  handleSearch = () => {
    console.log(this.state.movies)
  }

  render() {
    return (
      <div>
        <Navbar
          bg="dark"
          expand="lg"
          style={{ justifyContent: "space-around" }}
        >
          <NavLink to="/">
            <Navbar.Brand>Movie Catalogue</Navbar.Brand>
          </NavLink>
          <Navbar.Toggle aria-controls="basic-navbar-nav" />
          <Navbar.Collapse id="basic-navbar-nav">
            <Form inline>
              <FormControl
                type="text"
                placeholder="Search"
                className="mr-sm-2"
                onChange={this.handleChange}
                name="value"
                value={this.state.value}
              />
              <Button variant="dark" onClick={this.handleSearch}>Search</Button>
            </Form>
          </Navbar.Collapse>

          <NavLink to="/popular">Popular</NavLink>
          <NavLink to="/now-playing">Now Playing</NavLink>
          <NavLink to="/top-rated">Top Rated</NavLink>
          <NavLink to="/upcoming">Upcoming</NavLink>
        </Navbar>
      </div>
    )
  }
}

export default Header

I am getting an empty array in movies .我在movies得到一个空数组。 When I console log this.state.movies inside handleSearch it's stil returning an empty array.当我在handleSearch控制台记录this.state.movies ,它仍然返回一个空数组。 I don't know why's it happening.我不知道为什么会这样。 The url and everything is correct but I'm getting an empty array.网址和一切都是正确的,但我得到了一个空数组。

I think you should use get() method in your searchMovies function.我认为您应该在 searchMovies 函数中使用 get() 方法。

const response = await axios.get('/user?ID=12345');
console.log(response);

You are not calling appropriate method of axios.您没有调用 axios 的适当方法。 Use get() method使用 get() 方法

Try this:尝试这个:

 searchMovies = async val => {
    this.setState({ isSearching: true })
    const res = await axios.get(
      `https://api.themoviedb.org/3/search/movie?api_key=${apiKey}&language=en-US&query=${val}page=1&include_adult=true`;
    )
    const movies = await res.data.results;
    this.setState({ movies: movies, isSearching: false })
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM