当前位置: 首页 > article >正文

Resume全栈项目(二)(.React+Ts)


文章目录

  • 项目地址
  • 一、前端获取后端Api
    • 1.1 读取Campany列表
      • 1. 创建统一后端接口
      • 2. 封装axios请求
      • 3. 创建接口文档
      • 4. 前端读取数据
    • 1.2 添加Company
      • 1. 添加CreateCompany的interface
      • 2. 添加页面


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、前端获取后端Api

1.1 读取Campany列表

1. 创建统一后端接口

📂 src
┣ 📂 constants
┃ ┗ 📄 url.constants.ts

  • src里创建constants文件夹,添加url.constans.ts用来存放baseUrl
export const baseUrl = "https://localhost:7129/api";

2. 封装axios请求

  • 封装了 Axios HTTP 客户端,用于简化 API 请求,并且可以统一设置基础 URL、超时时间、请求头等配置
    http.module.ts
import axios from "axios";
import { baseUrl } from "../constants/url.constants";

const httpModule = axios.create({
   baseURL: baseUrl,
   timeout: 5000, // 5秒超时
  headers: { "Content-Type": "application/json" }
});

export default httpModule;

3. 创建接口文档

📂 src
┣ 📂 types
┃ ┣ 📄 company.types.ts
┃ ┣ 📄 job.types.ts
┃ ┗ 📄 index.ts

  1. company.types.ts 用来处理company页面相关的接口
export interface ICompany {
   id: string;
   name: string;
   size: string;
   createdAt: string;
}

export interface ICreateCompanyDto {
   name: string;
   size: string;
}

4. 前端读取数据

  • 使用useEffect读取后端数据

const Companies = () => {
   const [companies, setCompanies] = useState<ICompany[]>([]);
   const [loading, setLoading] = useState<boolean>(false);
   const redirect = useNavigate();

   useEffect(() => {
      setLoading(true);
      httpModule
         .get<ICompany[]>("/Company/Get")
         .then((response) => {
            setCompanies(response.data);
            setLoading(false);
         })
         .catch((error) => {
            alert("Error");
            console.log(error);
            setLoading(false);
         });
   }, []);

   //    console.log(companies);

   return (
      <div className="content comapnies">
         <div className="heading">
            <h2>Companies</h2>
            <Button variant="outlined" onClick={() => redirect("/companies/add")}>
               <Add />
            </Button>
         </div>
         {loading ? (
            <CircularProgress size={100} />
         ) : companies.length === 0 ? (
            <h1>No Company</h1>
         ) : (
            <CompaniesGrid data={companies} />
         )}
      </div>
   );
};

export default Companies;

1.2 添加Company

1. 添加CreateCompany的interface

  • 创建company的interfrace
export interface ICreateCompanyDto {
   name: string;
   size: string;
}

2. 添加页面

  1. 设置表单存储的state
   const [company, setCompany] = useState<ICreateCompanyDto>({ name: "", size: "" });
  1. 获取表单数据

在这里插入图片描述
3. 将表单数据提交

在这里插入图片描述


http://www.kler.cn/a/613729.html

相关文章:

  • 【漫话机器学习系列】166.向量(Vectors)
  • ubuntu 创建新用户
  • Flink Credit-based机制解析
  • 数字化攻防战场的进化论:红蓝对抗训练如何重塑网络安全范式
  • PTA 7-16 一元多项式求导
  • Axure项目实战:智慧城市APP(六)市民互动(动态面板、显示与隐藏)
  • 【Linux-驱动开发-模块的加载和卸载】
  • 【深度学习】训练集、测试集、验证集、过拟合、欠拟合详解
  • WebRTC简介及应用
  • 【Git】--- Git远程操作 标签管理
  • Anaconda Jupyter 默认启动位置修改
  • javaWeb Router
  • Python面试题库-持续更新中
  • Android 图片裁剪 压缩等处理记录
  • Stable Diffusion vue本地api接口对接,模型切换, ai功能集成开源项目 ollama-chat-ui-vue
  • java对pdf文件分页拆分
  • [特殊字符] 2025蓝桥杯备赛Day14——P8752 [蓝桥杯 2021 省 B2] 特殊年份
  • 使用QT画带有透明效果的图
  • Linux 配置NFS服务器
  • 自动化发布工具CI/CD实践Jenkins部署与配置教程