4

我知道有类似的问题,但我不知道为什么会发生错误。Div 显示,但随后应用程序崩溃(好像是一些长度问题)

代码类似于我找到的示例,比如这个沙箱

我究竟做错了什么?

这是组件:

import React, { useState, useEffect } from 'react'
/* import Button from '../Button' */
import { getPlanets } from '../../services/index'
import './Planetas.css'


const Planetas = () => {

    const [planetas, setPlanetas] = useState([]);

    useEffect(() => {
        const fetchPlanetas = async () => {
            const planetas = await getPlanets()
            setPlanetas({ planetas })
        };    
        fetchPlanetas()
    }, []);


    return (
      <div className="planetas">
      {
        planetas.map((planeta, key) => {
            return <div key={key}>{planeta.name}</div>
        })
      }
      </div>
    )
}

export default Planetas

这是 api 服务:

import axios from 'axios'

const BASE_URL = 'https://swapi.co/api/planets'

export const getPlanets = async() => {
    const planets = await axios.get(`${BASE_URL}`).catch((e) => {
        console.error(e);
    })
    console.log('resp\n')
    console.log(planets.data.results)

    return planets.data.results
}

错误:

在此处输入图像描述

4

4 回答 4

5

setPlanetas({ planetas }) 在这一行中,您将状态设置为具有planetas属性的对象,而不是您需要做setPlanetas(planetas)

于 2019-07-12T05:28:18.230 回答
1

您有planetas状态是array数据类型,但是当您更新planetas状态时,您使用响应数组外部的花括号更新状态,即setPlanetas({ planetas })而不是setPlanetas(planetas).

useEffect(() => {
        const fetchPlanetas = async () => {
            const planetas = await getPlanets()
            setPlanetas(planetas) // remove curly braces here
        };    
        fetchPlanetas()
    }, []);

于 2019-07-12T06:02:54.167 回答
0

我有一个类似的问题,我用过:

Object.values(array).map()

它对我有用。我希望帮助别人。

于 2022-02-02T20:57:30.913 回答
0

这里需要一个数组来映射。=> setPlanetas(行星)。

于 2019-07-12T05:43:07.790 回答