当前位置: 首页 > 知识库问答 >
问题:

如何使用hooks React将本地JSON数据设置为状态

梁丘钊
2023-03-14

我是React的新手,并试图了解函数组件中的挂钩。我在应用程序的公共目录中的本地. json文件中有一个Products对象数组。在我的src目录中,我有我的Products组件。我需要将. json数据带入该组件并在页面上呈现它。我使用useState()挂钩来设置产品和setProducts const。然后我使用getData函数获取json数据,该函数使用该数据调用setProducts(我认为)。getData()在useEffects挂钩中被调用。然后我使用. map函数将其呈现到页面。

我添加了一个语句来检查数据是否已获取,但是现在浏览器中没有任何渲染,console.log(产品)给我一个空数组,所以我知道数据设置不正确。

代码如下:

import React, { useState, useEffect } from 'react';

export default function Products() {

    const [products, setProducts]=useState([]);
    const getData=()=>{
      fetch('data.json'
      ,
      {
        headers : { 
          'Content-Type': 'application/json',
          'Accept': 'application/json'
         }
      }
      )
        .then(function(response){
          console.log(response)
          return response.json();
        })
        .then(function(myJson) {
           console.log(myJson);
          setProducts(myJson)
        });
    }
    useEffect(()=>{
      getData()
    },[])

    return (
        <div>
            <ul className="products">
                {products.length > 0 && products.map(product => (
                    <li key={product._id}>
                        <div className="product">
                            <a href={"#" + product._id}>
                                <img src={product.image} alt={product.title} />
                                <p>
                                    {product.title}
                                </p>
                            </a>
                            <div className="productPrice">
                                <div>
                                    {product.price}
                                </div>
                                <button className="button primary">
                                    Add to cart
                                </button>
                            </div>
                        </div>
                    </li>
                ))}
            </ul>
        </div>
    );
}

共有2个答案

韩涵衍
2023-03-14

检查响应是否为空,代码中的其他内容是否正确。

编辑

然后设置产品(myJson.body)。因为现在YOU正在将产品设置为整个响应对象,而不是响应的主体。如果不是一系列产品,也可以从身体中设置所需内容

阚亮
2023-03-14

您需要等待通过这样的操作获取产品

<ul className="products">
  { products.length > 0 && products.map(product => (
     <li key={product._id}>
     // ...
  }
</ul>
 类似资料:
  • 如何使用如下变量设置State: 请帮忙,我做这件事有困难。

  • 我有一个设置活动在Android Studio,用户将在文本框中输入一个名称。他们将点击保存并进入另一个活动,他们的名字将显示在文本视图中。我在尝试在文本视图中显示名称时遇到了麻烦,我尝试了一些不同的方法,并得到了一些不同的错误,这可能是一些简单的东西,我没有得到或忽略。这是我的错误代码 我的错误是:

  • 问题内容: 这是我的PostgreSQL函数: 它有一个参数,我想通过JPQL 将Java传递给它: 上面的代码失败,但例外: 所以我不确定如何从EclipseLink调用我的函数。 问题答案: 通过将String []类型的Java数组传递给您进行测试,以进行测试。似乎PgJDBC不接受Java数组作为带有或不带有参数的参数。 合规 JDBC规范 16.5“数组对象” 建议JDBC 部分存在,因

  • 问题内容: 我有一个本地JSON对象,其格式如下: 我想设置此作为一个jQuery的数据源的数据表,并尝试这样的: DataTables插件加载并尝试绘制表,但显示错误“表中无可用数据” 我不是在进行AJAX调用,只是想从本地JS变量访问JSON对象。 问题答案: 提供您自己的数据的属性不是: 工作小提琴

  • 问题内容: 我正在尝试将HikariCP与Spring一起用于连接池。我正在使用jdbcTempLate和JdbcdaoSupport。 这是我用于数据源的spring配置文件: 但不幸的是,正在生成以下错误消息: 谁能告诉我如何解决这个问题? 问题答案: 你需要在bean配置上编写此结构(这是你的数据源): 这是我的示例,正​​在运行。你只需要将属性放在hibernate.properties上

  • 我想在运行时根据某些条件将组设置为特定的@测试方法 假设我有以下课程 现在,在运行测试时,我正在命令行中将“-groups group1”或“-groups group2”发送到TestNG。因此,testng根据传递的组名运行test2()或test3()。现在,我的要求是运行test1(),它不应该附加任何组。无论我向testng runner提供什么组,每次都应该运行这个test1()。我尝