Ошибка при попытке отобразить карту элементов

Я пытаюсь выяснить, где моя ошибка на моей странице реакции 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;

Вы дважды проверяли, что data.recipes возвращает фактические данные после получения? Может быть, в некоторых случаях он возвращает undefined, который, в свою очередь, установит состояние recipes на undefined, которое затем вы получите эту ошибку, когда попробуете props.recipes.map....

Andrew Lohr 07.01.2019 21:03

Ранее он возвращал данные. Но через некоторое время я не знаю почему. Теперь в консоли он сообщает мне «Непойманный (в обещании) TypeError: не удается прочитать свойство 'map' of undefined», где я начинаю отображать элементы

Kenny Quach 07.01.2019 21:11

Я думаю, это потому, что я превысил лимит использования API

Kenny Quach 07.01.2019 21:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
198
1

Ответы 1

Как отмечает Эндрю в комментариях, похоже, что ответ сервера - это 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....

Andrew Lohr 07.01.2019 20:58

Нет, но аргумент recipe в обратном вызове map с пустым массивом recipes определенно есть.

Andy 07.01.2019 20:59

если массив пуст, я не думаю, что обратный вызов даже выполняется.

Andrew Lohr 07.01.2019 21:01

Другие вопросы по теме