я учусь реагировать и js сам. Пожалуйста, объясните, почему возникает такая ситуация. PS: простите за большой текст, я постарался объяснить проблему как можно яснее. Спасибо. Суть дела: через хук установить начальное состояние:
const [pokemon, setPokemon] = useState({
img: "",
name: "",
types: [],
abilities: [],
moveList: [],
weight: "",
height: "",
description: "",
genus: "",
chanceToCatch: "",
evolutionURL: ""
});
далее я делаю api запросы на получение информации изнутри useEffect:
useEffect(() => {
const fetchData = async () => {
await Axios({
method: "GET",
url: urlPokemonAPI
})
.then(result => {
const pokemonResponse = result.data;
/* Pokemon Information */
const img = pokemonResponse.sprites.front_default;
const name = pokemonResponse.name;
const weight = Math.round(pokemonResponse.weight / 10);
const height = pokemonResponse.height / 10;
const types = pokemonResponse.types.map(type => type.type.name);
const abilities = pokemonResponse.abilities.map(
ability => ability.ability.name
);
const moveList = pokemonResponse.moves.map(move => move.move.name);
setPokemon(() => {
return {
img: img,
name: name,
weight: weight,
types: types,
abilities: abilities,
moveList: moveList,
height: height
};
});
})
await Axios({
method: "GET",
url: urlPokemonSpecies
}).then(result => {
let description = "";
result.data.flavor_text_entries.forEach(flavor => {
if (flavor.language.name === "en") {
description = flavor.flavor_text;
}
});
let genus = "";
result.data.genera.forEach(genera => {
if (genera.language.name === "en") {
genus = genera.genus;
}
});
const evolutionURL = result.data.evolution_chain.url;
const eggGroups = result.data.egg_groups.map(
egg_group => egg_group.name
);
const chanceToCatch = Math.round(
(result.data.capture_rate * 100) / 255
);
setPokemon(pokemon => {
return {
...pokemon,
description: description,
genus: genus,
chanceToCatch: chanceToCatch,
evolutionURL: evolutionURL,
eggGroups: eggGroups
};
});
});
};
fetchData();
}, [urlPokemonAPI, urlPokemonSpecies]);
Проблема возникает именно с eggGroups
(при одинаковой обработке abilities
и types
такой проблемы нет). И это то, что происходит, когда я хочу вывести данные на страницу в виде <div> Egg Group: {pokemon.eggGroups} </div>
, данные отображаются нормально, но как только я хочу вывести eggGroups
, а также abilities
и types
, разделенные запятыми (join ( ',')
) - ошибка: TypeError: pokemon.eggGroups is undefined
. Я решил проверить это через консоль и вставил ключ eggGroups
в тайм-аут:
В какой-то момент eggGroups
становится неопределенным ... почему, я не могу понять. Но если я устанавливаю состояние отдельно, как const [egg, setEgg] = useState ([]); setEgg (eggGroups);
, то такой проблемы не наблюдается. почему это происходит? все было хорошо с types
и abilities
. Заранее спасибо.