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

【React】项目的目录结构全面指南

文章目录

    • 一、React 项目的基本目录结构
      • 1. node_modules
      • 2. public
      • 3. src
      • 4. App.js
      • 5. index.js
      • 6. .gitignore
      • 7. package.json
      • 8. README.md
    • 二、React 项目的高级目录结构
      • 1. api
      • 2. hooks
      • 3. pages
      • 4. redux
      • 5. utils
    • 三、最佳实践

在开发一个 React 项目时,良好的目录结构可以极大地提升开发效率和代码的可维护性。本文将详细介绍 React 项目的标准目录结构,涵盖从基础到高级的最佳实践,帮助你构建一个清晰、有条理的项目架构。

一、React 项目的基本目录结构

一个典型的 React 项目通常由以下几个主要目录和文件组成:

my-react-app/
├── node_modules/
├── public/
│   ├── index.html
│   ├── favicon.ico
│   └── ...
├── src/
│   ├── components/
│   ├── assets/
│   ├── App.js
│   ├── index.js
│   └── ...
├── .gitignore
├── package.json
├── README.md
└── ...

1. node_modules

node_modules 目录包含了项目的所有依赖包,由 npm 或 yarn 自动生成和管理。在项目中,我们一般不会手动修改这个目录。

2. public

public 目录存放静态资源,包含 HTML 文件、图标等。默认的 index.html 文件是 React 应用的入口 HTML 文件。

<!-- public/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>My React App</title>
</head>
<body><div id="root"></div>
</body>
</html>

3. src

src 目录是我们主要编写代码的地方,包含了所有的 React 组件、样式和其他资源。通常会按照功能或组件类型来组织代码。

components

components 目录存放项目的所有 React 组件。通常,我们会按照组件的功能或页面进行子目录的划分。

// src/components/Header.js
import React from 'react';const Header = () => (<header><h1>My React App</h1></header>
);export default Header;

assets

assets 目录存放项目的静态资源,如图片、字体、样式等。

4. App.js

App.jsReact 应用的根组件,通常用于设置路由和全局状态管理。

// src/App.js
import React from 'react';
import Header from './components/Header';const App = () => (<div><Header /><main><p>Welcome to my React app!</p></main></div>
);export default App;

5. index.js

index.jsReact 应用的入口文件,负责渲染根组件 Appindex.html 中的 root 节点。

// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<App />, document.getElementById('root'));

6. .gitignore

.gitignore 文件用于指定哪些文件和目录不应被 Git 版本控制系统追踪。

# .gitignore
node_modules/
build/
dist/
.env

7. package.json

package.json 文件包含项目的元数据和依赖包信息。

{"name": "my-react-app","version": "1.0.0","scripts": {"start": "react-scripts start","build": "react-scripts build","test": "react-scripts test","eject": "react-scripts eject"},"dependencies": {"react": "^17.0.2","react-dom": "^17.0.2"}
}

8. README.md

README.md 文件用于描述项目的基本信息、安装步骤和使用说明。

# My React AppThis is a simple React application.## Installationnpm install## Usagenpm start

二、React 项目的高级目录结构

随着项目的复杂度增加,我们需要更灵活的目录结构来管理代码。以下是一个高级的 React 项目目录结构示例:

my-react-app/
├── node_modules/
├── public/
├── src/
│   ├── api/
│   │   └── index.js
│   ├── components/
│   │   ├── common/
│   │   └── specific/
│   ├── hooks/
│   │   └── useCustomHook.js
│   ├── pages/
│   │   ├── Home.js
│   │   └── About.js
│   ├── redux/
│   │   ├── actions/
│   │   ├── reducers/
│   │   └── store.js
│   ├── utils/
│   │   └── helpers.js
│   ├── App.js
│   ├── index.js
│   └── ...
├── .gitignore
├── package.json
├── README.md
└── ...

1. api

api 目录用于存放与后端 API 的交互逻辑。

// src/api/index.js
import axios from 'axios';const apiClient = axios.create({baseURL: 'https://api.example.com',headers: {'Content-Type': 'application/json'}
});export const fetchData = async () => {const response = await apiClient.get('/data');return response.data;
};

2. hooks

hooks 目录用于存放自定义的 React Hooks。

// src/hooks/useCustomHook.js
import { useState, useEffect } from 'react';const useCustomHook = () => {const [data, setData] = useState(null);useEffect(() => {// Fetch data or perform other side effects}, []);return data;
};export default useCustomHook;

3. pages

pages 目录用于存放页面组件,这些组件通常会包含路由配置。

// src/pages/Home.js
import React from 'react';const Home = () => (<div><h1>Home Page</h1></div>
);export default Home;

4. redux

redux 目录用于存放 Redux 的相关文件,包括 actions、reducers 和 store 配置。

// src/redux/store.js
import { createStore } from 'redux';
import rootReducer from './reducers';const store = createStore(rootReducer);export default store;

5. utils

utils 目录用于存放通用的工具函数。

// src/utils/helpers.js
export const formatDate = (date) => {return new Date(date).toLocaleDateString();
};

三、最佳实践

  1. 模块化组织

将代码模块化是保持代码清晰和可维护的关键。将不同功能的代码分离到不同的目录中,有助于团队协作和代码的可读性。

  1. 避免过度嵌套

尽量避免目录结构过度嵌套,这会增加项目的复杂度和文件的查找难度。保持目录结构扁平化,有助于快速定位和修改代码。

  1. 合理命名

目录和文件的命名应简洁明了,反映其内容和用途。例如,components 目录下的文件应当命名为组件名称,utils 目录下的文件应当命名为工具函数名称。

  1. 统一风格

保持代码风格的一致性,有助于提高代码的可读性和团队协作效率。使用 ESLint 和 Prettier 等工具,可以自动化地保持代码风格一致。


在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring随笔
  • 最近火爆的GraphRAG是什么?真的那么有用吗?
  • 正则采集器之四——采集网站管理
  • 后端面试题日常练-day13 【Java基础】
  • 一些和颜色相关网站,你懂的!!!
  • random.sample() 函数原理
  • RT-DETR:DETRs Beat YOLOs on Real-time Object Detection (CVPR2024)
  • M3U8流视频数据爬虫
  • 达梦数据库的系统视图v$bufferpool
  • 学习测试12-车(略)
  • Windows下Git Bash乱码问题解决
  • C++11新增特性及右值引用
  • C#高级:枚举(Enum)从索引、值到注释的完整使用技巧
  • 养猫老手激情开麦!希喂白小罐试吃测评分享!
  • Leetcode 11. 盛最多水的容器
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [译]Python中的类属性与实例属性的区别
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【Leetcode】104. 二叉树的最大深度
  • 【个人向】《HTTP图解》阅后小结
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JS 面试题总结
  • Yii源码解读-服务定位器(Service Locator)
  • 讲清楚之javascript作用域
  • 使用Gradle第一次构建Java程序
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一天一个设计模式之JS实现——适配器模式
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​VRRP 虚拟路由冗余协议(华为)
  • #图像处理
  • (13)Hive调优——动态分区导致的小文件问题
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (day18) leetcode 204.计数质数
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十六)Flask之蓝图
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)SvelteKit教程:hello world
  • (转)3D模板阴影原理
  • (转)德国人的记事本
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Project Open Day(2011.11.13)
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .Net6使用WebSocket与前端进行通信
  • .net中生成excel后调整宽度
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • @SpringBootApplication 注解
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作
  • [android] 请求码和结果码的作用