开发者问题收集

TypeError:无法读取未定义的 Reactjs 的属性“map”

2019-03-26
959

我是 React 新手,再次需要帮助 - 一切都很好,直到我将代码从 App.js 转移到单独的组件 - 并且因为它是无状态组件,我使用 props 和 map 函数从 App.js 访问值和状态,但这并不令人满意 - 请帮忙

import React from 'react';

const Recipes = props => (
  <div>
    {props.recipes.map(recipe => (
        <div key={recipe.recipe_id}>
          <img src={recipe.image_url} alt={recipe.title} />
          <p>{recipe.title}</p>
        </div>
    ))}
    </div>
);

export default Recipes;
2个回答

这仅意味着您没有正确传入 recipes 作为渲染 <Recipes /> 的 prop。 recipes 为空或格式不正确。

例如:

// App.js

import React from 'react';

const App = () => {
  const recipes = [{
    recipe_id: '<id>',
    image_url: '<some url>',
    title: 'Lé title'
  }];

  // recipes could be null/undefined or not even passed as a prop

  return (
    <Recipes recipes={recipes} />
  );
}
export default App;
Special Character
2019-03-26

因此,如果无法看到您如何传递 props 以及它们到底包含什么数据,就很难确切地知道发生了什么。您收到的错误意味着您实际上没有正确发送配方数组。

老实说,我再也不会在 React 中使用无状态函数了,因为 PureComponent 通常表现更好,因为它内置了 shouldComponentUpdate,可以防止不必要的重新渲染。所以这是我编写该组件的方式:

import React, { PureComponent } from 'react';

class Recipes extends PureComonent {
  recipeList = () => {
    const recipes = this.props;
    const recipeArray = recipes.map((recipe) => {
      <div key={recipe.recipe_id}>
        <img src={recipe.image_url} alt={recipe.title} />
        <p>{recipe.title}</p>
      </div>
    });
    return recipeArray;
  }

  render () {
    return () {
      <div>
        {this.recipeList()}
      </div>
    }
  }
}

export default Recipes;

话虽如此,我猜测您编写组件的方式是,如果您要控制台输出 props,您会发现它实际上等于配方,这就是 Recipes.recipes 未定义的原因。

Alexis Bell
2019-03-26