You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React/Redux技术求助:API响应数据渲染问题

解决React渲染Yummly API食谱数组的问题

嘿,我之前在对接第三方API数据的时候也踩过一模一样的坑!这个错误的核心原因其实很直白:React没办法直接把一个完整的JavaScript对象当成页面元素渲染,你得把对象里的具体数据字段拆出来,逐个渲染才行。

咱们一步步来解决这个问题:

1. 先搞清楚API返回的结构

首先你得确认拿到的响应数据里,食谱数组到底存在哪个键下面。Yummly的API通常会返回一个包含recipes(也有可能是matches,取决于你调用的具体接口)的对象。先在控制台打印一下数据,确认清楚结构:

const data = await response.json();
console.log(data); // 看看控制台里的对象结构,找到食谱数组的键名

2. 提取数组并存储到状态里

把API返回的食谱数组提取出来,存在React状态中,方便后续渲染使用:

import { useState, useEffect } from 'react';

function RecipeApp() {
  const [recipes, setRecipes] = useState([]);

  useEffect(() => {
    const fetchRecipes = async () => {
      try {
        const response = await fetch('你的Yummly API请求URL');
        const data = await response.json();
        // 这里假设数组键是recipes,根据你实际打印的结果调整
        setRecipes(data.recipes);
      } catch (err) {
        console.error('获取食谱出错啦:', err);
      }
    };

    fetchRecipes();
  }, []);

  // 接下来写渲染逻辑
}

3. 遍历数组,渲染具体字段

现在你有了recipes数组,就可以用map方法遍历它,每个食谱对象只渲染你需要的属性(比如菜名、食材、图片这些),绝对不能直接渲染整个recipe对象:

return (
  <div className="recipe-container">
    <h1>我的食谱列表</h1>
    {/* 遍历食谱数组 */}
    {recipes.map(recipe => (
      {/* 必须给每个列表项加唯一key,用recipe.id最靠谱 */}
      <div key={recipe.id} className="recipe-card">
        <h2>{recipe.recipeName}</h2>
        <p>来源: {recipe.sourceDisplayName}</p>
        <p>评分: {recipe.rating}/5</p>
        
        <h3>食材:</h3>
        <ul>
          {/* 遍历食材数组 */}
          {recipe.ingredients.map((ingredient, idx) => (
            <li key={idx}>{ingredient}</li>
          ))}
        </ul>

        {/* 渲染图片,注意imageUrlsBySize是对象,取你需要的尺寸 */}
        {recipe.imageUrlsBySize['90'] && (
          <img 
            src={recipe.imageUrlsBySize['90']} 
            alt={`${recipe.recipeName}的缩略图`}
          />
        )}
      </div>
    ))}
  </div>
);

关键注意点

  • 别直接渲染对象:要是你写{recipe}肯定会触发那个错误,必须渲染像recipe.recipeName这种具体的属性值
  • key不能少:map遍历的时候必须给每个元素加唯一的key,这里用recipe.id是最优解,因为每个食谱的ID都是唯一的
  • 处理可选字段:比如有的食谱可能没有图片,用&&判断一下再渲染,避免触发报错

这样调整之后,你应该就能正常渲染出食谱列表啦!

内容的提问来源于stack exchange,提问作者Josue Guzman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:33:36