【问题标题】:Use .map() to iterate array inside a object React使用 .map() 在对象 React 中迭代数组
【发布时间】:2020-10-05 11:07:09
【问题描述】:

我正在尝试迭代对象数组中的 throw 元素,但由于返回的数据不是数组而是对象,因此无法以简单的方式使用 .map()。

API 返回以下结构

/玩家(端点)

{
  "players": [
    {
      "player_id": "Uy2sZ5ef",
      "player_name": "Foo",
      "player_team": "5c50bae023213348c4453aaf"      
    },
    {      
      "player_id": "h15sqI4D",
      "player_name": "Foo 2",
      "player_team": "5c50bae023213348c4453aaf"
    }
  ]
}

反应组件

export class Players extends Component {
    state = {
        players: []
    }

    componentDidMount() {
    API.get(`players/`).then(res => {
            console.log(res)
            this.setState({ players: res.data })
        })
    }

    render() {
        return (
            <section className="contents">

                { this.state.players.map(player => <li>{player.player_name}</li>)}

            </section>
        );
    }
}

【问题讨论】:

    标签: javascript reactjs axios array.prototype.map


    【解决方案1】:

    您可能对功能组件感兴趣:

    const Players = () => {
      const [players, setPlayers] = useState([]);
    
      useEffect(() => {
        API.get(`players/`).then(res => {
          console.log(res);
          setPlayers(res.data.players); // <-- get only the players
        });
      }, []);
    
      return (
        <section className="contents">
          {players.map(player => (
            <li>{player.player_name}</li>
          ))}
        </section>
      );
    };
    

    【讨论】:

    • 确实我们都应该使用功能组件!
    【解决方案2】:

    如果您的数据看起来像那个对象,并且您只需要玩家,您应该:

        componentDidMount() {
        API.get(`players/`).then(res => {
                console.log(res)
                this.setState({ players: res.data.players }) // <-- get only the players
            })
        }
    

    【讨论】:

    • 没错,我没找到。在 Stackoverflow 延迟接受这个答案之后,我会这样做:)
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多