Я пытаюсь выяснить, где моя ошибка на моей странице реакции js
Я пробовал разные вещи, такие как преобразование его в компонент состояния, операторы возврата и рендеринга и т. д. Но это все еще дает мне
"TypeError: Cannot read property 'map' of undefined Recipes src/components/Recipes.js:4 1 | import React from "react"; 2 | 3 | const Recipes = (props) => ( 4 | 5 | { props.recipes.map((recipe)=> { 6 | return ( 7 | View compiled"
App.js
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import InputForm from "./components/InputForm";
import Recipes from "./components/Recipes"
const API_KEY= "mykey";
class App extends Component {
state= {
recipes: []
}
getRecipe = async (e) => {
e.preventDefault();
const recipeName = e.target.elements.recipename.value;
const api_call = await fetch(`https://www.food2fork.com/api/search?key=${API_KEY}&q=${recipeName}&page=2`)
const data = await api_call.json();
this.setState({ recipes: data.recipes });
}
render() {
return (
<div className = "App">
<header className = "App-header">
React Cookbook
</header>
<InputForm getRecipe = {this.getRecipe} />
<Recipes recipes = {this.state.recipes} />
</div>
);
}
}
export default App;
Recipes.js
import React from "react";
const Recipes = (props) => (
<div>
{ props.recipes.map((recipe)=> {
return (
<div key = {recipe.recipe_id }>
<img src = {recipe.image_url} alt = {recipe.title}/>
<h3>{ recipe.title }</h3>
</div>
)
})}
</div>
)
export default Recipes;
Ранее он возвращал данные. Но через некоторое время я не знаю почему. Теперь в консоли он сообщает мне «Непойманный (в обещании) TypeError: не удается прочитать свойство 'map' of undefined», где я начинаю отображать элементы
Я думаю, это потому, что я превысил лимит использования API



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как отмечает Эндрю в комментариях, похоже, что ответ сервера - это undefined, и это то, что добавляется в объект состояния рецептов. Вы можете проверить это в консоли. Например, действительны ли ваш ключ API и название рецепта? Вы получаете доступ к правильной части возвращенных данных?
Кстати, recipes в state пуст при первом рендеринге. Вам нужно проверить эту возможность в своем коде. Здесь я просто вернул пустой div, но вместо этого вы можете добавить счетчик загрузки или что-то еще, чтобы предоставить пользователю полезную обратную связь.
render() {
const { recipes } = this.state;
if (!recipes.length) return <div />;
return (
<div className = "App">
<header className = "App-header">
React Cookbook
</header>
<InputForm getRecipe = {this.getRecipe} />
<Recipes recipes = {recipes} />
</div>
);
}
вернет ли пустой массив рецептов ошибку Cannot read property 'map' of undefined? Я думаю, что все было бы хорошо. Нравится [].map....
Нет, но аргумент recipe в обратном вызове map с пустым массивом recipes определенно есть.
если массив пуст, я не думаю, что обратный вызов даже выполняется.
Вы дважды проверяли, что
data.recipesвозвращает фактические данные после получения? Может быть, в некоторых случаях он возвращаетundefined, который, в свою очередь, установит состояниеrecipesнаundefined, которое затем вы получите эту ошибку, когда попробуетеprops.recipes.map....