在这个例子中,你可以看到script标签直接加载main.jsx。这种直接包含是与 Create React App 的主要区别,增强了对项目入口点的清晰度和控制。

1.1 依赖关系

为了确保您的脚本文件正确加载,Vite 利用现代 ES 模块导入。确保您的 package.json 包含必要的依赖项:

\\\"dependencies\\\": {  \\\"react\\\": \\\"^18.2.0\\\",  \\\"react-dom\\\": \\\"^18.2.0\\\"}

在 HTML 文件中显式包含脚本可确保应用程序的正确加载和执行顺序,从而减轻脚本加载的潜在问题。

2.main.jsx

main.jsx 文件充当 React 应用程序的入口点。该文件负责将根组件渲染到 DOM 中。它通常是在index.html 中脚本标记的src 属性中指定的文件。

import React from \\'react\\';import ReactDOM from \\'react-dom/client\\';import App from \\'./App.jsx\\';import \\'./index.css\\';// Render the root component into the root element in the HTMLReactDOM.createRoot(document.getElementById(\\'root\\')).render(        );

在此文件中,ReactDOM.createRoot 用于将 App 组件渲染到具有 id root 的 HTML 元素中。这种直接渲染方法无需临时保留任何根元素,从而简化了流程,使应用程序从何处启动以及涉及哪些组件变得清晰可见。

3.应用程序.jsx

App.jsx 文件包含主应用程序组件的定义。该组件作为 React 组件树的根。

import React from \\'react\\';const App = () => {  return (    

Hello, Vite and React!

);};export default App;

在此文件中,您定义应用程序的主要结构和行为。 App 组件是您构建主要 UI 和功能的地方,就像在任何其他 React 项目中一样。

附加材料和最佳实践

4. 将 Tailwind CSS 与 Vite 结合使用

Tailwind CSS 可以轻松集成到 Vite 项目中,实现实用优先的样式。

  1. 安装 Tailwind CSS:
npm install -D tailwindcss postcss autoprefixernpx tailwindcss init -p
  1. 配置 Tailwind:

使用项目的特定路径更新 tailwind.config.js:

module.exports = {  content: [\\'./index.html\\', \\'./src/**/*.{js,jsx,ts,tsx}\\'],  theme: {    extend: {},  },  plugins: [],};
  1. 在 CSS 中包含 Tailwind:

更新index.css以包含Tailwind的基础、组件和实用程序:

@tailwind base;@tailwind components;@tailwind utilities;

5. 模块热更换(HMR)

Vite提供开箱即用的HMR,让您无需刷新页面即可实时看到变化。

6. 环境变量

Vite使用.env文件来管理环境变量。在项目的根目录创建一个 .env 文件并定义变量:

VITE_API_URL=https://api.example.com

使用 import.meta.env:
在应用程序中访问这些变量

const apiUrl = import.meta.env.VITE_API_URL;

7. 优化构建流程

Vite 的构建命令(vite build)在底层使用 Rollup 来生成高度优化的静态资产以用于生产。这可确保您的应用程序快速高效。

结论

在React项目中使用Vite可以提供精简高效的开发体验。了解 index.html、main.jsx 和 App.jsx 等关键文件的流程和结构可以显着增强您的开发过程。凭借 Tailwind CSS 集成、HMR 和优化构建的附加优势,Vite 成为 React 开发人员的现代、强大工具。

通过利用这些功能和最佳实践,您可以轻松创建高性能、可扩展且可维护的应用程序。

","image":"http://www.luping.net/uploads/20240731/172241388566a9f33d9b199.jpg","datePublished":"2024-07-31T16:18:05+08:00","dateModified":"2024-07-31T16:18:05+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解 React 项目中的 Vite 流程和结构

了解 React 项目中的 Vite 流程和结构

发布于2024-07-31
浏览:557

Understanding Vite Flow and Structure in a React Project

使用 React 时,Vite 提供了简化的开发体验,与传统的 Create React App 设置有一些关键区别。本博文将探讨典型Vite项目的结构,重点关注index.html、main.jsx、App.jsx等关键文件。

1.index.html

在 Vite 支持的 React 应用程序中,index.html 是一个关键的起点。与 Create React App 自动注入脚本不同,Vite 要求您直接指定脚本文件。这种显式包含简化了对应用程序的入口点和依赖项的理解。


  
    
    
    Vite   React
  
  
    

在这个例子中,你可以看到script标签直接加载main.jsx。这种直接包含是与 Create React App 的主要区别,增强了对项目入口点的清晰度和控制。

1.1 依赖关系

为了确保您的脚本文件正确加载,Vite 利用现代 ES 模块导入。确保您的 package.json 包含必要的依赖项:

"dependencies": {
  "react": "^18.2.0",
  "react-dom": "^18.2.0"
}

在 HTML 文件中显式包含脚本可确保应用程序的正确加载和执行顺序,从而减轻脚本加载的潜在问题。

2.main.jsx

main.jsx 文件充当 React 应用程序的入口点。该文件负责将根组件渲染到 DOM 中。它通常是在index.html 中脚本标记的src 属性中指定的文件。

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App.jsx';
import './index.css';

// Render the root component into the root element in the HTML
ReactDOM.createRoot(document.getElementById('root')).render(
  
    
  
);

在此文件中,ReactDOM.createRoot 用于将 App 组件渲染到具有 id root 的 HTML 元素中。这种直接渲染方法无需临时保留任何根元素,从而简化了流程,使应用程序从何处启动以及涉及哪些组件变得清晰可见。

3.应用程序.jsx

App.jsx 文件包含主应用程序组件的定义。该组件作为 React 组件树的根。

import React from 'react';

const App = () => {
  return (
    

Hello, Vite and React!

); }; export default App;

在此文件中,您定义应用程序的主要结构和行为。 App 组件是您构建主要 UI 和功能的地方,就像在任何其他 React 项目中一样。

附加材料和最佳实践

4. 将 Tailwind CSS 与 Vite 结合使用

Tailwind CSS 可以轻松集成到 Vite 项目中,实现实用优先的样式。

  1. 安装 Tailwind CSS:
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
  1. 配置 Tailwind:

使用项目的特定路径更新 tailwind.config.js:

module.exports = {
  content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
};
  1. 在 CSS 中包含 Tailwind:

更新index.css以包含Tailwind的基础、组件和实用程序:

@tailwind base;
@tailwind components;
@tailwind utilities;

5. 模块热更换(HMR)

Vite提供开箱即用的HMR,让您无需刷新页面即可实时看到变化。

6. 环境变量

Vite使用.env文件来管理环境变量。在项目的根目录创建一个 .env 文件并定义变量:

VITE_API_URL=https://api.example.com

使用 import.meta.env:
在应用程序中访问这些变量

const apiUrl = import.meta.env.VITE_API_URL;

7. 优化构建流程

Vite 的构建命令(vite build)在底层使用 Rollup 来生成高度优化的静态资产以用于生产。这可确保您的应用程序快速高效。

结论

在React项目中使用Vite可以提供精简高效的开发体验。了解 index.html、main.jsx 和 App.jsx 等关键文件的流程和结构可以显着增强您的开发过程。凭借 Tailwind CSS 集成、HMR 和优化构建的附加优势,Vite 成为 React 开发人员的现代、强大工具。

通过利用这些功能和最佳实践,您可以轻松创建高性能、可扩展且可维护的应用程序。

版本声明 本文转载于:https://dev.to/vyan/understanding-vite-flow-and-structure-in-a-react-project-2e84?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-12-23
  • 如何在同一目录中组织一个库和 CLI 的 Go 项目?
    如何在同一目录中组织一个库和 CLI 的 Go 项目?
    在多包项目中组织代码在同时需要库和命令行界面 (CLI) 的 Go 项目中,经常会遇到以下问题在同一目录中有多个包。这样的项目结构:whatever.io/ myproject/ main.go myproject.go包 main 和 func main 对...
    编程 发布于2024-12-23
  • 如何在 Android 中选择后保持 ListView 项目突出显示?
    如何在 Android 中选择后保持 ListView 项目突出显示?
    如何在 Android 中选择后保持 ListView 项目突出显示在 Android 中,维护 ListView 项目的选定状态可以通过提供以下功能来增强用户体验:当前选择的清晰视觉指示器。然而,有时开发人员会遇到这样的问题:所选项目在某些事件(例如滚动或与 ListView 进一步交互)后失去突...
    编程 发布于2024-12-23
  • 如何使用自定义 CSS 在 Bootstrap 3 中创建全高列?
    如何使用自定义 CSS 在 Bootstrap 3 中创建全高列?
    Bootstrap 3 全高列:自定义 CSS 解决方案简介:创建Twitter Bootstrap 3 的全高布局可能具有挑战性。虽然Bootstrap的原生类不支持此功能,但可以使用自定义CSS来实现此效果。自定义CSS方法:设置100% 高度:将 body、container 和 row 元素...
    编程 发布于2024-12-23
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-23
  • 如何在不使用链接的情况下向 Span 元素添加工具提示?
    如何在不使用链接的情况下向 Span 元素添加工具提示?
    向不带链接的 Span 元素添加工具提示将鼠标悬停在 span 元素上时,通常需要向用户提供附加信息。这可以使用工具提示来实现,而不依赖于链接。解决方案:要使用内置 HTML 属性将工具提示添加到 span 元素,只需按如下方式使用 title 属性:<span title="My ...
    编程 发布于2024-12-23
  • 为什么我的 WebSocket 服务器在 Docker 化后无法连接?
    为什么我的 WebSocket 服务器在 Docker 化后无法连接?
    Docker化 WebSocket 服务器问题开发人员在尝试使用 Docker 容器化 WebSocket 服务器时遇到问题。服务器代码使用“connected”写入新连接,并且在容器外运行良好,但当放置在 Docker 容器内时,客户端会由于“连接重置”错误而出现恐慌,并显示错误消息“read t...
    编程 发布于2024-12-23
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-23
  • Python中如何导入同目录或子目录中的类?
    Python中如何导入同目录或子目录中的类?
    在Python中从同一目录或子目录导入类在Python中,您可以通过以下方式从同一目录或子目录中的文件导入类利用 __init__.py 文件。该文件是一个空占位符,指示该目录包含模块和包。从同一目录导入从与 main 相同的目录中的文件导入类.py,在该目录中创建一个 __init__.py 文件...
    编程 发布于2024-12-23
  • 为什么C90中函数名可以用作函数指针?
    为什么C90中函数名可以用作函数指针?
    使用函数名称作为函数指针C90 的基本原理文档深入了解了将函数名称与函数指针等同的设计选择。这种便利简化了在特定上下文中使用函数指针的过程。函数声明考虑声明:int f(); int (*pf)();函数调用以下所有表示有效的函数调用:(&f)(); f(); (*f)(); (**f)()...
    编程 发布于2024-12-23
  • 如何在 Python 中使用多个单词边界分隔符将字符串拆分为单词?
    如何在 Python 中使用多个单词边界分隔符将字符串拆分为单词?
    使用多个单词边界定界符将字符串拆分为单词处理文本数据时,常见的任务是将字符串拆分为单个单词。 Python 的 str.split() 方法提供了一个简单的解决方案,但它仅支持单个分隔符作为其参数。在处理包含多种类型的单词边界(例如标点符号)的文本时,此限制可能会成为障碍。Python re 模块提...
    编程 发布于2024-12-23
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-23
  • 为什么 Selenium 在 Chrome 中定位元素时会抛出“NoSuchElementException”?
    为什么 Selenium 在 Chrome 中定位元素时会抛出“NoSuchElementException”?
    "NoSuchElementException" for Chrome with SeleniumIssue尝试在 Chrome 上使用 Selenium 与 QWOP 交互时,始终出现错误消息: selenium.common.exceptions.NoSuchElementE...
    编程 发布于2024-12-23
  • 为什么Java中的静态方法不能是抽象的?
    为什么Java中的静态方法不能是抽象的?
    为什么Java中静态方法不能是抽象的在Java编程中,静态方法不能是抽象的。抽象方法意味着该方法有声明但没有实现,将其留给子类来提供功能。但是,无论是否创建对象实例,静态方法本质上都与类本身相关联。以下示例演示了抽象静态方法的问题:abstract class foo { abstract ...
    编程 发布于2024-12-23
  • 如何将 Qt 调试输出重定向到文件?
    如何将 Qt 调试输出重定向到文件?
    重定向 Qt 调试输出调试 Qt 应用程序时,大量的 qDebug() 和相关语句可能会因过多的调试输出而使控制台变得混乱。对此,开发人员经常寻求一种跨平台的方法来将此输出重定向到文件。Qt方式:qInstallMessageHandlerQt提供了更方便的处理方法使用 qInstallMessag...
    编程 发布于2024-12-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3