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

vue3入门特性

Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架:核心思想是通过声明式的方式来描述 UI 组件,并通过响应式系统来自动更新 UI。Vue 3 引入了许多新特性和改进,包括组合式 API(Composition API)、更好的性能和 TypeScript 支持。

Vue 3 使用原理

  1. 声明式渲染

    • Vue 允许你通过声明式的方式来描述 UI。你只需要定义数据和模板,Vue 会自动将数据渲染到模板中。
  2. 响应式系统

    • Vue 的响应式系统会自动追踪数据的变化,并在数据变化时更新 UI。Vue 3 使用 Proxy 对象来实现响应式系统,相比 Vue 2 的 Object.defineProperty,性能更好,功能更强大。
  3. 组件化

    • Vue 允许你将 UI 分解成独立的、可复用的组件。每个组件包含自己的模板、数据和逻辑。
  4. 组合式 API

    • Vue 3 引入了组合式 API,允许你通过函数来组织组件的逻辑。这种方式更灵活,更易于复用和测试。

代码实例

1. 安装 Vue 3

使用 Vue CLI 或 Vite 来创建一个 Vue 3 项目。这里我使用 Vite。

npm init vite@latest my-vue-app --template vue
cd my-vue-app
npm install
npm run dev
2. 创建一个简单的 Vue 3 组件

src 目录下创建一个新的组件文件 HelloWorld.vue

<template><div><h1>{{ message }}</h1><button @click="updateMessage">Click me</button></div>
</template><script setup>
import { ref } from 'vue';const message = ref('Hello, Vue 3!');function updateMessage() {message.value = 'You clicked the button!';
}
</script><style scoped>
h1 {color: #42b983;
}
</style>
3. 使用组件

src/App.vue 中使用 HelloWorld 组件:

<template><div id="app"><HelloWorld /></div>
</template><script setup>
import HelloWorld from './components/HelloWorld.vue';
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>
4. 运行项目

在终端中运行以下命令来启动开发服务器:

npm run dev

打开浏览器访问 http://localhost:3000

详细说明

  1. 声明式渲染

    • HelloWorld.vue 中,我们使用模板语法 {{ message }} 来绑定数据 message。Vue 会自动将 message 的值渲染到模板中。
  2. 响应式系统

    • 我们使用 ref 函数创建了一个响应式数据 message。当 message 的值发生变化时,Vue 会自动更新 UI。
  3. 组件化

    • 我们将 UI 分解成独立的组件 HelloWorld,并在 App.vue 中使用它。每个组件包含自己的模板、数据和逻辑。
  4. 组合式 API

    • 我们使用组合式 API(refsetup)来组织组件的逻辑。ref 创建了一个响应式数据,setup 函数是组件的入口点,用于初始化数据和定义方法。
      在使用 Vue 3 创建项目时,通常会有一个标准的目录结构。这个结构有助于组织代码,使项目更易于维护和扩展。以下是一个典型的 Vue 3 项目目录结构及其各个部分的作用:

典型的 Vue 3 项目目录结构

my-vue-app/
├── node_modules/
├── public/
│   ├── favicon.ico
│   └── index.html
├── src/
│   ├── assets/
│   │   └── logo.png
│   ├── components/
│   │   └── HelloWorld.vue
│   ├── views/
│   │   └── Home.vue
│   ├── App.vue
│   ├── main.js
│   └── router.js
├── .gitignore
├── index.html
├── package.json
├── README.md
├── vite.config.js
└── yarn.lock / package-lock.json

各个目录和文件的作用

  1. node_modules/

    • 作用:存放项目的所有依赖包。这个目录由包管理器(如 npm 或 yarn)自动生成和管理。
  2. public/

    • 作用:存放静态资源,这些资源不会被 Webpack 处理,直接复制到最终的构建目录。
    • favicon.ico:网站的图标。
    • index.html:项目的入口 HTML 文件。Vue CLI 会在构建时自动注入生成的 JavaScript 和 CSS 文件。
  3. src/

    • 作用:存放项目的源代码。
    • assets/:存放静态资源,如图片、字体等。这些资源会被 Webpack 处理。
      • logo.png:示例图片文件。
    • components/:存放 Vue 组件。
      • HelloWorld.vue:示例组件文件。
    • views/:存放视图组件,通常用于路由。
      • Home.vue:示例视图文件。
    • App.vue:根组件,所有其他组件都是这个组件的子组件。
    • main.js:项目的入口文件,创建 Vue 实例并挂载到 DOM。
    • router.js:路由配置文件(如果使用 Vue Router)。
  4. .gitignore

    • 作用:指定哪些文件和目录不应该被 Git 版本控制系统追踪。
  5. index.html

    • 作用:项目的入口 HTML 文件。与 public/index.html 类似,但通常用于开发环境。
  6. package.json

    • 作用:项目的配置文件,包含项目的基本信息、依赖包、脚本等。
  7. README.md

    • 作用:项目的说明文件,通常用于描述项目的用途、安装和使用方法。
  8. vite.config.js

    • 作用:Vite 的配置文件,用于配置项目的构建和开发环境。
  9. yarn.lock / package-lock.json

    • 作用:锁定依赖包的版本,确保在不同环境中安装的依赖包版本一致。

代码示例

以下是一些关键文件的示例代码:

src/main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';createApp(App).use(router).mount('#app');
src/App.vue
<template><div id="app"><router-view></router-view></div>
</template><script>
export default {name: 'App',
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>
src/router.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from './views/Home.vue';const routes = [{path: '/',name: 'Home',component: Home,},
];const router = createRouter

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Excel 学习手册 - 精进版(包括各类复杂函数及其嵌套使用)
  • ES6 对象的新增方法(十四)
  • Milvus 核心设计(5)--- scalar indexwork mechanism
  • 华为HCIP Datacom H12-821 卷40
  • FPGA上板项目(二)——PLL测试
  • c++单例模式
  • 「Conda」在Linux系统中安装Conda环境管理器
  • python安全脚本开发简单思路
  • SpringBoot+Vue实现简单的文件上传(txt篇)
  • 华为USG6000V防火墙v1
  • 【区块链 + 智慧政务】城市公积金中心区块链基础服务平台 | FISCO BCOS应用案例
  • 网络安全工作者如何解决网络拥堵
  • Centos---命令详解 vi 系统服务 网络
  • 【C语言】深入解析选择排序
  • 音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现
  • Druid 在有赞的实践
  • HTTP--网络协议分层,http历史(二)
  • magento2项目上线注意事项
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Zepto.js源码学习之二
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 解析 Webpack中import、require、按需加载的执行过程
  • 面试遇到的一些题
  • 日剧·日综资源集合(建议收藏)
  • 入门级的git使用指北
  • 我的zsh配置, 2019最新方案
  • 一、python与pycharm的安装
  • 移动端唤起键盘时取消position:fixed定位
  • 在Unity中实现一个简单的消息管理器
  • 最简单的无缝轮播
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2)Java 简介
  • (20)docke容器
  • (LeetCode 49)Anagrams
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (循环依赖问题)学习spring的第九天
  • (一)Dubbo快速入门、介绍、使用
  • (一)SvelteKit教程:hello world
  • .Net - 类的介绍
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net生成的类,跨工程调用显示注释
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Autowired标签与 @Resource标签 的区别