首页 > 解决方案 > 为什么我的钩子状态没有正确更新?

问题描述

我不知道这些人是怎么做到的,我不能用 api 数组更新我的状态,如果我把它放在 useEffect 我有一个错误,因为我没有发送任何数据,请帮助我是我第一次使用 stackoverflow


    import React, { useEffect, useState } from "react";
    import getTeam from "../Helpers/getTeam";
    
    const selectTeams = [
        "Barcelona",
        "Real Madrid",
        "Juventus",
        "Milan",
        "Liverpool",
        "Arsenal",
    ];
    
    const Select = () => {
        const [team, setTeam] = useState(null);
        const [loading, setLoading] = useState(null);
    
        const handleOption = async (e) => {
            setLoading(true);
            let teamsJson = await getTeam(e.target.value);
            let arr = [];
            Object.keys(teamsJson).map((teamjs, i) => {
                return arr.push(teamsJson[teamjs]);
            });
            console.log(arr);
            console.log(team);
            setTeam(arr);
            setLoading(false);
        };
    
        return (
            <div
                style={{ background: "skyblue", textAlign: "center", padding: "20px" }}
            >
                <h1>Equipos Disponibles</h1>
                <div>
                    <select onChange={handleOption}>
                        <option>Elige tu equipo</option>
                        {selectTeams.map((selectTeam, i) => {
                            return <option key={i}>{selectTeam}</option>;
                        })}
                    </select>
                </div>
                {loading ? <h1>suave</h1> : (
                    team !== null ? (
                        team.map((newTeam, i) => {
                            return (
                                <div>
                                    the items are here
                                </div>
                            )
                        })
                    ) : null
                )}
            </div>
        );
    };
    
    export default Select;

我让你我的 api 文件下来

const getTeam = async (teamName) => {
    const url = `https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${teamName}`;

    const res = await fetch(url);

    const team = await res.json();

    return team;
};

export default getTeam;

我想用我的 api 调用的响应来更新我的 const 团队,但它没有更新它,我不知道该怎么做,请帮助我

标签: arraysreactjsreact-hooksstate

解决方案


teamsJson值是具有单个键和某个数组的值的对象

{ teams: [...] }

因此,当您将值推送到另一个数组时,您正在使用嵌套数组更新您的状态。

let arr = [];
Object.keys(teamsJson).map((teamjs, i) => {
  return arr.push(teamsJson[teamjs]);
});

根据您要如何映射team状态数组,我假设您只想要原始内部数组来自teamJson.

const { teams } = await getTeam(e.target.value);
setTeam(teams);

然后,当您进行映射时,您可以访问您需要的任何属性。

team.map((newTeam, i) => {
  return <div key={i}>{newTeam.idTeam}</div>;
})

正确编辑Why-my-hook-state-doesn%C2%B4t-update-correct

在此处输入图像描述


推荐阅读