javascript - data.map 不是一个函数 React

标签 javascript reactjs

经过几个小时的尝试更正代码后,我来到这里寻求帮助。 这个想法是搜索一个 Angular 色并显示我选择的一些细节,现在 我根本无法解决这个问题,我尝试迭代死亡数组并从那里收集一些信息:

我正在使用此 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

我基本上想做的是将 Angular 色的所有死亡都显示在“玩家死亡”下,但无论我尝试的代码有什么变化,我都会继续遇到相同的错误:

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, . ..等])

关于javascript - data.map 不是一个函数 React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60453450/

相关文章:

reactjs - 从同一函数访问 Useimperativehandle 方法

javascript - Ant design Form "Warning: ` callback` 已弃用。请返回一个 promise 。”自定义规则错误

javascript - 为什么 "this"在某些情况下绑定(bind)不同,但在 React 中的其他情况下相同?

javascript - Dojo 1.4 如何绑定(bind)对象

javascript - 在 ThreeJS 中打乱位置数组

javascript - Jhon Papa Angular 风格指南 Factory - 对象内的函数未运行

javascript - 如何在拖动节点后将其连接到 d3 树

javascript - 如何阻止事件回调自行触发?

javascript - react native 如何在点击 onPress 时调用多个函数

javascript - 如何在我的特定情况下形成嵌套数组的数组?