首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用钩子将类组件更改为函数组件

用钩子将类组件更改为函数组件
EN

Stack Overflow用户
提问于 2020-09-02 14:50:38
回答 1查看 41关注 0票数 0

我正在学习react,并尝试将类组件转换为一个函数组件,并使用useEffect和useState用钩子获取数据,但是它不起作用。这是我的类组件,下面是函数组件的草稿,我认为我使用useEffect的方式有问题。所有的帮助都将不胜感激。

代码语言:javascript
复制
import React, { useEffect, useState } from 'react';

const Shop = () =>  {

  const [products, setProducts] = useState([]);
  
  useEffect(() => {
    fetch(`/products`)
      .then(response => response.json())
      .then(response => {
      setProducts(products);
    });
  })
  
  return (
    <div>
      {
        products.map(product => (
          <div className="shop ml-5 mt-4" key={product.id}>
            <img className="image" src={product.image} alt=""/><br></br>
            <button className= "mt-4 btn btn-light">QUICKSHOP</button>
            <button className="mt-4 btn btn-light">ADD TO CART</button>
            <p className="mt-4"> {product.title}</p>
            <p>{product.price}</p>
          </div>
        )) }
    </div>
  )
}

export default Shop;

所有的帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-02 14:54:14

在类组件中,您希望在挂载上运行getProducts,但是在functional中,您需要在每次呈现时运行fetch。向useEffect添加一个空依赖数组,以确保它只在挂载上运行,而不是每次运行。

您还需要使用setProducts(response);,而不是setProducts(products); - products是现有的(空)状态。

代码语言:javascript
复制
useEffect(() => {
  fetch(`/products`)
    .then(response => response.json())
    .then(response => {
      setProducts(response);
    });
}, [])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63708095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档