javascript - data.map 不是函数反应
问题描述
经过几个小时的尝试更正代码后,我来这里寻求帮助。这个想法是搜索一个角色并显示我选择的一些细节,现在我根本无法解决这个问题,我尝试迭代死亡数组并从那里收集一些信息:
我正在使用这个 API:https ://tibiadata.com/doc-api-v2/characters/
import React ,{useEffect,useState}from 'react'
import './App.css';
import SearchCharacter from './SearchCharacter'
import Death from './Death'
function App() {
const [currentPlayer,setCurrentPlayer] =useState([])
const [playerDeath,setPlayerDeath] =useState([])
const [search,setSearch] = useState("")
const [query,setQuery] = useState('')
const BASE_URL = `https://api.tibiadata.com/v2/characters/${query}.json`
useEffect(() => {
fetch(BASE_URL)
.then(res =>res.json())
.then(data=>{
setCurrentPlayer(data.characters.data,...Object.keys(data.characters.data))
setPlayerDeath(...data.characters.deaths,...Object.keys(data.characters.deaths))
})
}, [query])
const updateSearch = e=>{
setSearch(e.target.value)
}
const getSearch =e =>{
e.preventDefault();
setQuery(search)
setSearch('')
}
return (
<div>
<h1>Tibia </h1>
<form onSubmit ={getSearch}>
<input placeholder="Enter Name" input ={search} onChange ={updateSearch}/>
<button >Search</button>
</form>
<SearchCharacter currentPlayer ={currentPlayer}/>
{playerDeath.map(death =>(<Death
key = {death.death.reason}
reason = {death.death.reason}
level = {death.death.level}
/>))}
</div>
)
}
export default App
死亡组件:
import React from 'react'
const Death =({reason,level}) =>{
return (
<div>
<p>Player Death: Played died by {reason} at level : {level}</p>
</div>
)
}
export default Death;
搜索字符组件:
import React from 'react'
const SearchCharacter =({currentPlayer}) =>{
return (
<div>
<p>Player Name :{currentPlayer.name}</p>
<p>Player Level :{currentPlayer.level}</p>
<p>Player Vocation :{currentPlayer.vocation}</p>
</div>
)
}
export default SearchCharacter
我基本上想要做的是让一个角色的所有死亡都出现在“玩家死亡”下,但无论我尝试的代码有什么变化,我都会继续遇到同样的错误:
data.map 不是一个函数——我已经尝试过让其他解决方案适应我的代码,但我无法让它看起来有效。在某些时候,我可以显示一个死亡,如果没有死亡 - 代码会崩溃。
现在在我的代码玩了很多之后,它甚至不会显示 Death 组件 jsx 。
任何帮助将不胜感激!
解决方案
改变setPlayerDeath(...data.characters.deaths,...Object.keys(data.characters.deaths))
到setPlayerDeath([...data.characters.deaths,...Object.keys(data.characters.deaths)])
就像你本质上在做的那样setPlayerDeath(v1, v2, v3, v4, ...etc)
,当你想要的时候setPlayerDeath([v1, v2, v3, v4, ...etc])
推荐阅读
- java - 何时使用 java.* 和 jdk.* 包
- python - 每次生成数字时测试随机函数都会增加一个变量。如何缩短以下代码块
- python-3.x - 在新列的单元格级别计算数据框列表中的连续元素
- r - gtsummary p 值因子水平
- java - How do I create a bulleted list in docx with Apache Poi 5?
- python - 如何计算所有可能的列对的条件概率?
- docker - 如何在 Gitlab CI/CD 脚本中使用 Docke image blazemeter/taurus?
- python - How to retrieve list of tasks in a queue in Celery?
- heroku - How do I host a discord.py bot that is using lavalink on heroku
- ssas-tabular - Data in server is not in tabular cube