使用Hook完成过程中遇到了问题

来源:9-4 【API连接】AJAX 异步获取推荐数据

vue请爱我

2023-01-31

希望老师能够解答疑惑,谢谢!!
代码如下所示:一个问题是productList没有数据,还有一个问题是seterror(error.message);报错图片描述

import {
  Header1,
  Footer,
  SideMenu,
  Carousel,
  ProductCollection,
  BusinessPartners,
} from '../../Components';
import axios from 'axios';
import { useState, useEffect } from 'react';
import { Row, Col, Typography, Spin } from 'antd';
// import { productList1, productList2, productList3 } from '../../mockup';
import sideImage from '../../assets/imgs/sider_2019_12-09.png';
import sideImage2 from '../../assets/imgs/sider_2019_02-04.png';
import sideImage3 from '../../assets/imgs/sider_2019_02-04-2.png';
import style from './Home.module.css';
interface State {
  loading: boolean;
  error: string | null;
  productList: any[];
}
export const Home: React.FC<State> = () => {
  let [loading, setloading] = useState(true);
  let [error, seterror] = useState(null);
  let [productList, setproductList] = useState([]);
  useEffect(() => {
    async function loadData() {
      try {
        const { data } = await axios.get(
          'http://123.56.149.216:8080/api/productCollections'
        );
        setloading(false);
        seterror(null);
        setproductList(data);
        console.log(productList);
      } catch (error) {
        if (error instanceof Error) {
          seterror(error.message);
          setloading(false);
        }
      }
    }
    loadData();
  }, []);
  if (loading) {
    return (
      <Spin
        size="large"
        style={{
          marginTop: 200,
          marginBottom: 200,
          marginLeft: 'auto',
          marginRight: 'auto',
          width: '100%',
        }}
      />
    );
  }
  if (error) {
    return <div>网站出错:{error}</div>;
  }
  return (
    <>
      <Header1></Header1>
      <div className={style['page-content']}>
        <Row style={{ marginTop: 20 }}>
          <Col span={6}>
            <SideMenu></SideMenu>
          </Col>
          <Col span={18}>
            <Carousel></Carousel>
          </Col>
        </Row>
        <ProductCollection
          title={
            <Typography.Title level={3} type="warning">
              爆款推荐
            </Typography.Title>
          }
          sideImage={sideImage}
          products={productList[0].touristRoutes}
        />
        <ProductCollection
          title={
            <Typography.Title level={3} type="danger">
              新品上市
            </Typography.Title>
          }
          sideImage={sideImage2}
          products={productList[1].touristRoutes}
        />
        <ProductCollection
          title={
            <Typography.Title level={3} type="success">
              国内游推荐
            </Typography.Title>
          }
          sideImage={sideImage3}
          products={productList[2].touristRoutes}
        />
      </div>
      <BusinessPartners></BusinessPartners>
      <Footer></Footer>
    </>
  );
};

写回答

1回答

阿莱克斯刘

2023-02-08

//img.mukewang.com/szimg/63e359db09d0edf911900298.jpg

可以尝试一下把红框中的代码改为

let [error, seterror] = useState(“”);

let [error, seterror] = useState<string>(“”);


0
0

React18 系统精讲 结合TS打造旅游电商平台

React18 精讲 + 结合 TS 实战 + 热门业务开发,获取必备技能

1993 学习 · 1015 问题

查看课程