当前位置: 代码迷 >> JavaScript >> 无法从获取中获取JSON列表ReactJS
  详细解决方案

无法从获取中获取JSON列表ReactJS

热度:65   发布时间:2023-06-13 12:44:54.0

大家好,我正在使用《星球大战》 API在ReactJS中进行实验。

我想收集以下形式的人员:

{
    "count": 87,
    "next": "https://swapi.co/api/people/?page=2",
    "previous": null,
    "results": [
        {
            "name": "Luke Skywalker",
            "height": "172",
            "mass": "77",
            "hair_color": "blond",
            "skin_color": "fair",
            "eye_color": "blue", ... (continues)

因为我可以获取单个字符,所以我知道获取机制正在起作用,但是我无法获取结果中的字符列表。

我的应用程序如下所示:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Character from './Character'
class App extends Component {
  constructor() {
    super()
    this.state = {
      people : {},
      character: {}
    }
    fetch("https://swapi.co/api/people/1")
            .then(response => response.json())
            .then(data => {
                this.setState({
                    character: data
                })
            })

    fetch("https://swapi.co/api/people/")
            .then(response => response.json())
            .then(data => {
                this.setState({
                    people: data
                })
            })
    console.log(this.state.people)
    console.log(this.state.people.results)
  }
  render() {
    return (
      <div className="App">
        <Character
          character = { this.state.character}
        />
      </div>
    );
  }
}

export default App;

我从console.log的信息中获取此信息(其余信息用于正常工作的单个字符)。

第一个console.log给我一个(在firefox Web控制台中)

对象{}

第二个让我不确定。

我已经尝试了很多东西,但似乎找不到如何获取该字符列表。.我还缺少什么?

1)您应该将请求调用移至componentDidMount生命周期方法

2)setState方法是异步的,因此记录该值可能无法在该确切时刻给出正确的值。 要获取正确的property值,请使用第二个参数(一个函数),该参数在状态更新后将被调用。

class App extends Component {
  constructor() {
    super()
    this.state = {
      people : [], // it should an array
      character: {}
    }
  }

  componentDidMount() {
    fetch("https://swapi.co/api/people/1")
            .then(response => response.json())
            .then(data => {
                this.setState({
                    character: data
                }, () => console.log(this.state.character))

            })

    fetch("https://swapi.co/api/people/")
            .then(response => response.json())
            .then(data => {
                this.setState({
                    people: data.results
                }, () => console.log(this.state.people.results))

            })

  }

  render() {
    return (
      <div className="App">
        <Character
          character = { this.state.character}
        />
      </div>
    );
  }
}

export default App;

您应该以此为契机来使用React挂钩。 未来future

const App = () => {
    // equivalent to the state object in your constructor
    const [people, setPeople] = React.useState({});
    const [character, setCharacter] = React.useState({});

    // as second argument is an empty array it is
    // the equivalent of componentDidMount
    React.useEffect(() => {
       fetch("https://swapi.co/api/people/1")
         .then(response => response.json())
         .then(data => {
             setCharacter(data);
          }
        )

        fetch("https://swapi.co/api/people/")
          .then(response => response.json())
          .then(data => {
            setPeople(data);
          }
        )
    }, []);

    return (
      <div className="App">
        <Character character={character} />
      </div>
    )
}
  相关解决方案