javascript - 反应 .map 不渲染
问题描述
我已经完成了一个 API 调用来获取一些数据,然后将其存储在一个数组中并在返回中执行一个 .map
如果你们有任何想法,这就是代码,我已经坚持了 2 个小时:(
import {useEffect, useState} from 'react';
import {useParams} from "react-router-dom";
import axios from "axios";
const CharacterScreen = () => {
const params = useParams()
const [character, setCharacter] = useState([]);
const [starships, setStarships] = useState([]);
useEffect(() => {
axios.get(`https://swapi.dev/api/people/?search=${params.character}`)
.then((r) => {
setCharacter(r.data.results[0])
getStarships(r.data.results[0])
})
.catch((e) => console.log(e))
const getStarships = (data) => {
let array = []
data.starships.forEach(element => {
axios.get(element)
.then((r) => {
array.push(r.data)
})
.catch((e) => console.log(e))
})
console.log(array)
setStarships(array)
}
}, []);
console.log(starships)
return (
<div>
<p>{character.name}</p>
<p>{character.eye_color}</p>
<p>{character.birth_year}</p>
<p>{character.gender}</p>
<p>{character.created}</p>
<p>{character.edited}</p>
{starships.map((element) => {
console.log('ok')
return (
<p key={element.key}>{element.name}</p>
)
})}
</div>
)
}
这是星舰的 .log :
这是我的回报:
任何帮助将不胜感激
解决方案
使用扩展运算符:
useEffect(() => {
axios.get(`https://swapi.dev/api/people/?search=${params.character}`)
.then((r) => {
setCharacter(r.data.results[0])
getStarships(r.data.results[0])
})
.catch((e) => console.log(e))
const getStarships = (data) => {
let array = []
data.starships.forEach(element => {
axios.get(element)
.then((r) => {
array.push(r.data)
})
.catch((e) => console.log(e))
})
setStarships([...array]) <=== //spread opeator
}
}, []);
推荐阅读
- angularjs - 角度服务示例不起作用
- spring-boot - 无法获取 Jedis 连接,嵌套异常:无法从池中获取资源
- r - 重新排序由 R 中的字符列组成的数据框
- amazon-s3 - AWS S3 CLI:调用 PutObject 操作时发生错误 (AllAccessDisabled):已禁用对此对象的所有访问
- linux - Linux 在匹配模式前后添加新行
- selenium - 如何实现 //*[contains(text(), '"example"')] 为 Selenium Webdriver: 的动态内容构造 Xpath:?
- excel - 动态表过滤给出错误 1004
- sql - 嵌套相交
- sql - DB2 SQL 中的可重新部署脚本。仅插入一行 如果一行不存在
- php - 尝试返回自定义 404 页面 Laravel