vue的增量式学习-篇章4

vue的增量式学习-篇章4, 又名:写毕设到企业级前端(第7天)

  • vue的增量式学习-篇章4
    • 工具链
    • 路由
    • 状态管理
    • Reactive State(响应式状态)
    • 使用Vuex
    • 测试
    • 服务端渲染 (SSR)
    • 最佳实践
    • 工业界实际用的产品及其分析
      • 前端长要接触的技术栈分析
      • 在Vue.js基础上构建的一些成熟的框架和库包括:

工具链

概念
工具链是一组工具和工作流程,用于开发、构建和部署Vue.js应用程序。它包括构建工具、打包工具、自动化任务、代码规范检查工具等,以提高开发效率和代码质量。

应用场景

  • 配置开发环境,使开发更便捷。
  • 使用构建工具将Vue.js代码转换为浏览器可执行的JavaScript。
  • 集成代码打包工具以减小应用程序的体积。

示例代码
Vue CLI是一个流行的Vue.js工具链,它可以用于创建、开发和构建Vue.js应用程序。以下是使用Vue CLI创建一个Vue.js项目的示例命令:

# 全局安装Vue CLI
npm install -g @vue/cli# 创建一个新的Vue.js项目
vue create my-project# 进入项目目录
cd my-project# 启动开发服务器
npm run serve

路由

概念
路由是指导用户在Vue.js应用程序中导航到不同视图或页面的机制。Vue Router是Vue.js的官方路由管理器,用于实现单页应用的客户端路由。

应用场景

  • 创建多页面应用,使用户可以在不同页面间切换。
  • 实现路由导航守卫,控制访问权限和页面切换逻辑。

示例代码
使用Vue Router创建简单的路由示例:

<template><div><router-link to="/home">Home</router-link><router-link to="/about">About</router-link><router-view></router-view></div>
</template><script>
import Vue from 'vue';
import VueRouter from 'vue-router';Vue.use(VueRouter);const Home = { template: '<div>Home Page</div>' };
const About = { template: '<div>About Page</div>' };const routes = [{ path: '/home', component: Home },{ path: '/about', component: About },
];const router = new VueRouter({routes,
});export default {router,
};
</script>

状态管理

概念
状态管理是管理Vue.js应用程序中的全局状态的机制。Vuex是Vue.js的官方状态管理库,它使用单一的状态树和一些规则来管理应用中的状态。

应用场景

  • 在多个组件之间共享和同步状态。
  • 处理复杂的数据流和逻辑。

示例代码

Reactive State(响应式状态)

概念: 响应式状态是指在Vue.js中管理的一种数据状态,其特点是当状态发生变化时,相关的界面会自动更新以反映这些变化。这种响应式的特性使得开发者可以更加轻松地管理和维护数据,以及实现数据与界面的同步。

应用场景:

  1. 表单数据管理: 在表单应用中,可以将表单输入的数据作为响应式状态,实时响应用户的输入变化,并将数据双向绑定到界面上。
  2. 列表数据展示: 当需要展示动态数据列表时,响应式状态可以使列表内容根据数据变化自动更新,不需要手动操作DOM。
  3. 全局状态管理: 在大型应用中,可以使用响应式状态来管理全局的应用状态,以确保各个组件之间的数据同步。

示例代码:

<template><div><h1>响应式状态示例</h1><p>当前计数: {{ count }}</p><button @click="increment">增加</button><button @click="decrement">减少</button></div>
</template><script>
export default {data() {return {count: 0, // 使用响应式状态存储计数};},methods: {increment() {this.count++; // 修改响应式状态会自动更新界面},decrement() {this.count--;},},
};
</script><style>
/* 样式可以根据需要进行添加 */
</style>

在上面的示例中,count被定义为响应式状态,当用户点击“增加”或“减少”按钮时,count的值发生变化,界面上的计数会自动更新以反映这些变化。这就是响应式状态的典型应用场景。

使用Vuex

使用Vuex创建一个简单的状态管理示例:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);export default new Vuex.Store({state: {count: 0,},mutations: {increment(state) {state.count++;},decrement(state) {state.count--;},},actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment');}, 1000);},},
});
<!-- MyComponent.vue -->
<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button><button @click="incrementAsync">Increment Async</button></div>
</template><script>
import { mapState, mapMutations, mapActions } from 'vuex';export default {computed: {...mapState(['count']),},methods: {...mapMutations(['increment', 'decrement']),...mapActions(['incrementAsync']),},
};
</script>

提供的代码片段是Vue.js组件的一部分,它演示了如何在Vue应用程序中使用Vuex库进行状态管理。让我们逐步分解代码:

  1. 导入语句
    • mapStatemapMutationsmapActions是从Vuex库导入的函数。这些函数有助于简化在组件中使用Vuex存储中的状态、mutations和actions的过程。
  2. 默认导出
    • export default { ... }将组件选项导出为一个对象。这是Vue组件的典型结构。
  3. 计算属性
    • computed对象内部,使用...mapState(['count'])。这将count状态属性从Vuex存储映射到计算属性count。这意味着您可以在组件中访问this.count,并且它将自动与Vuex存储的count同步。
  4. 方法
    • methods对象内部,使用...mapMutations(['increment', 'decrement'])将Vuex存储中的incrementdecrement mutations映射到组件中同名的方法。这允许您在组件中调用this.increment()this.decrement()来触发这些mutations。
    • 类似地,...mapActions(['incrementAsync'])将Vuex存储中的incrementAsync action映射到组件中同名的方法。您可以调用this.incrementAsync()来触发相应的action。

总之,这个代码片段展示了如何使用mapStatemapMutationsmapActions辅助函数将Vue组件连接到Vuex存储。它简化了在组件中访问和修改状态以及提交mutations和actions的过程。

测试

概念
测试是一种验证Vue.js应用程序行为和功能的方法。Vue.js支持单元测试和端到端测试,可以使用不同的测试框架(如Jest、Mocha、Cypress等)来进行测试。

应用场景

  • 编写单元测试来验证组件的功能和逻辑。
  • 编写端到端测试来验证应用程序的整体行为。

示例代码
使用Jest进行Vue.js组件的单元测试示例:

// MyComponent.vue
<template><div><p>{{ message }}</p><button @click="updateMessage">Update Message</button></div></template><script>
export default {data() {return {message: 'Hello, Vue!',};},methods: {updateMessage() {this.message = 'New Message';},},
};
</script>
// MyComponent.spec.js (Jest单元测试)
import { shallowMount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';describe('MyComponent.vue', () => {it('renders message correctly', () => {const wrapper = shallowMount(MyComponent);expect(wrapper.text()).toMatch('Hello, Vue!');});it('updates message when button is clicked', async () => {const wrapper = shallowMount(MyComponent);await wrapper.find('button').trigger('click');expect(wrapper.text()).toMatch('New Message');});
});

服务端渲染 (SSR)

概念
服务端渲染(SSR)是一种在服务器端生成Vue.js应用程序的HTML并将其发送到客户端的技术。它可以提高应用程序的性能和搜索引擎优化。

应用场景

  • 需要更快的首次加载时间。
  • 需要支持搜索引擎爬虫的应用程序。

示例代码
使用Vue.js的服务端渲染示例:

<!-- App.vue -->
<template><div><p>{{ message }}</p></div>
</template><script>
export default {data() {return {message: 'Hello, SSR!',};},
};
</script>
// server.js (Express服务器)
const express = require('express');
const Vue = require('vue');
const { createRenderer } = require('vue-server-renderer');const app = express();
const renderer = createRenderer();app.get('/', (req, res) => {const app = new Vue({data: {message: 'Hello, SSR!',},template: '<div><p>{{ message }}</p></div>',});renderer.renderToString(app, (err, html) => {if (err) {res.status(500).end('Internal Server Error');return;}res.end(`<!DOCTYPE html><html><head><title>SSR Demo</title></head><body>${html}</body></html>`);});
});app.listen(3000, () => {console.log('Server is running on <http://localhost:3000>');
});

最佳实践

概念
最佳实践是一组经验法则和指南,用于在Vue.js应用程序中编写高质量、可维护和高性能的代码。它们是Vue.js社区和官方文档提供的建议和最佳实践。

应用场景

  • 提高代码质量,减少bug。
  • 提高应用程序的性能和用户体验。

示例代码
以下是一些Vue.js最佳实践的示例:

  • 使用Vue Router进行路由导航守卫以控制访问权限。
  • 使用Vuex进行状态管理以确保组件之间的数据同步。
  • 使用Vue的生命周期钩子来管理组件的初始化和销毁。
  • 使用Vue CLI构建工具链来创建和管理Vue.js项目。
  • 使用Vue的单文件组件来组织代码和模板。
  • 使用Vue的计算属性来处理数据逻辑。
  • 使用Vue的自定义指令来扩展应用程序的功能。

这些最佳实践可以根据项目的需求和规模进行调整和扩展。

其实到了学这里,就可以去实战做项目了。

  1. 要是忘记了就回到文章这里再看看, 报错就耐心查查资料。
  2. 调试代码和进行编写代码的时候,梳理好大方向的逻辑思维即可。
  3. 接下来其实就是需要进行企业级的工具学习,和思想学习。毕竟在这讲究敏捷开发的时代,需要快速开发。👇(想学习底层,和新的文章学习。就关注我重复造轮子系列的代码。还有阅读前沿的论文的篇章)

工业界实际用的产品及其分析

前端长要接触的技术栈分析

在前端领域,与Vue.js相关的企业级技术栈通常包括以下组件:

  1. Vue.js:作为前端框架的核心,用于构建用户界面和前端应用的主要逻辑。
  2. Vue Router:用于管理前端路由和导航的官方库,支持单页应用的页面切换和路由管理。
  3. Vuex:用于状态管理的官方库,适用于大型应用,确保状态的一致性和可维护性。
  4. UI组件库:企业级应用通常会选择一个UI组件库来加速开发,确保一致的UI风格。常见的选项包括Element UI、Ant Design Vue、Vuetify等。
  5. HTTP客户端库:用于与后端API通信的HTTP客户端库,如axios或fetch,用于请求数据和处理API响应。
  6. 前端构建工具:用于构建、打包和优化前端代码的构建工具,如Webpack、Parcel、Rollup等。
  7. 代码质量工具:静态代码分析工具和代码风格检查工具,如ESLint、Prettier,用于确保代码质量和一致性。
  8. 前端测试工具:包括单元测试、集成测试和端到端测试工具,如Jest、Mocha、Cypress等,用于测试前端应用的不同层面。
  9. 前端框架集成:与其他前端框架的集成,如与React、Angular等框架的协同工作。
  10. 持续集成/持续部署(CI/CD):用于自动化构建、测试和部署的CI/CD工具,如Jenkins、Travis CI、GitLab CI/CD等。

这些技术组件构成了一个完整的前端技术栈,能够支持企业级应用的开发和部署。不同的企业和项目可能会根据具体需求选择适合的技术组件来构建他们的前端应用。

但是这些有时候还不够方便,比如一些组件库,想一拿来就直接用的。就可以选:

在Vue.js基础上构建的一些成熟的框架和库包括:

  1. Nuxt.js:Nuxt.js是一个基于Vue.js的通用应用框架,专注于服务器端渲染(SSR)。它提供了许多内置功能,如路由、异步数据加载、自动代码拆分等,使开发SSR应用变得更加容易。
  2. Quasar Framework:Quasar Framework是一个用于构建Vue.js应用程序的全功能框架。它提供了大量的UI组件、构建工具和插件,使开发者能够轻松创建Web、移动和桌面应用。
  3. Vuetify:Vuetify是一个流行的Vue.js UI组件库,提供了丰富的Material Design风格的UI组件。它可以用于快速构建漂亮的界面。
  4. VuePress:VuePress是一个静态网站生成器,专门用于创建文档和博客。它是基于Vue.js和Markdown的,非常适合构建技术文档和个人博客。
  5. Gridsome:Gridsome是一个静态网站生成器,类似于VuePress,但更加灵活,可以用于构建静态博客、电子商务网站等。
  6. Element Plus:Element Plus是Element UI的升级版本,是一个用于Vue.js的UI组件库,提供了现代化和可自定义的UI组件。
  7. Vue Router Next:Vue Router Next是Vue 3的官方路由库,为Vue 3提供了新的路由功能和性能优化。
  8. Pinia:Pinia是一个状态管理库,专门为Vue 3设计。它提供了类似于Vuex的状态管理功能,但更加灵活和性能优化。

这些框架和库构建在Vue.js的基础之上,为开发者提供了更多的工具和功能,使得构建各种类型的应用变得更加容易和高效。根据项目的需求和规模,开发者可以选择适合他们的框架或库来扩展Vue.js的功能。

这边介绍一款叫pig,**RuoYi-Cloud**的开源项目, 里面可以满足一般的小企业的web向的开发。里面开发全栈项目的时候,接私单开发小程序的时候特别方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】配置阿里云镜像加速器

默认情况下&#xff0c;将来从docker hub &#xff08;https://hub.docker.com )上下载镜像太慢&#xff0c;所以一般配置镜像加速器。 没有账号的注册一个账号并登录 登录之后点击控制台 查看 cat /etc/docker/daemon.json

pandasDataFrame读和写csv文件

从.csv文件读数据 import pandas as pd# 从CSV文件中读取数据 train_df pd.read_csv("datasets/train01.csv") val_df pd.read_csv("datasets/val01.csv") test_df pd.read_csv("datasets/test01.csv")# 显示数据框的前几行&#xff0c;确保…

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域…

大数据StarRocks(五) :数据类型

StarRocks 支持数据类型&#xff1a;数值类型、字符串类型、日期类型、半结构化类型、其他类型。您在建表时可以指定以下类型的列&#xff0c;向表中导入该类型的数据并查询数据。 5.1 数值类型 SMALLINT2 字节有符号整数&#xff0c;范围 [-32768, 32767] INT4 字节有符号整…

2024最新Selenium面试题,建议收藏备用!

一.你在TestNG中使用了哪些注解&#xff1f; Test BeforeSuite AfterSuite BeforeTest AfterTest BeforeClass AfterClass BeforeMethod AfterMethod 二.如何从Excel中读取数据&#xff1f; FileInputStream fs new FileInputStream(“excel文件路径”); Workbook …

代码随想录day21 二叉搜索树进阶

530.二叉搜索树的最小绝对差 题目 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 思考 本题有一种笨办法&#xff0c;就是把二叉树的所有结点都存到一个vector里&#xff0c;因为二叉搜索树是左中右排序…

【致远FAQ】V8.0_甘特图能不能实现行表头一级一级显示(树形结构)

问题描述 甘特图能不能实现行表头一级一级显示&#xff08;树形结构&#xff09; 问题解决 设置统计时把合并同类型和显示行合计都勾选上就可以了 效果参考

信息学奥赛一本通2067详解+代码

题目&#xff1a;http://ybt.ssoier.cn:8088/show_source.php?runid24484837 2067&#xff1a;【例2.5】圆 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 98334 通过数: 53637 【题目描述】 输入半径r&#xff0c;输出圆的直径、周长、面积&#xff0c;数与数…

AcWing 851. spfa求最短路AcWing 852. spfa判断负环—spfa算法

问题链接:AcWing 851. spfa求最短路 问题描述 spfa算法是对bellman-ford算法的改进&#xff0c;bellman-ford算法比较笨&#xff0c;要遍历所有边来更新&#xff0c;其实如果当前点没有被更新的话&#xff0c;就不用用当前点来更新他所连接的点了。我们只需要每次更新一个点后…

小游戏实战丨基于Tkinter的五子棋小游戏

文章目录 写在前面Tkinter五子棋系列文章写在后面 写在前面 本期内容&#xff1a;基于tkinter的五子棋小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700190 实验环境 python3.11及以上pycharmtkinter Tkinter Tkinter是Python的一个标准…

vue2 element 弹出框拖拽会出现一层阴影问题

问题如图所示&#xff1a; 因增加 draggable 属性导致我弹窗表单清空文本框时&#xff0c;从右向左选中字体会出现拖拽阴影效果 去掉 draggable 即可 <template><div class"sys-jobTrigger-container"><el-dialog:visible.sync"state.isShowD…

密码学:一文看懂初等数据加密一对称加密算法

文章目录 对称加密算法简述对称加密算法的由来对称加密算法的家谱数据加密标准-DES简述DES算法的消息传递模型DES算法的消息传递过程和Base64算法的消息传递模型的区别 算法的实现三重DES-DESede三重DES-DESede实现 高级数据加密标准一AES实现 国际数据加密标准-IDEA实现 基于口…

25计算机专业考研经验贴之准备篇

Hello各位小伙伴&#xff0c;大家新年好&#xff01; 马上就要进入寒假假期了&#xff0c;25考研也该提上日程了。今天先跟大家分享一下大家在假期可以先做起来的准备工作。 【选择学校】 择校是个非常重要的内容&#xff0c;因为不同学校的考试内容是不一样的&#xff0c;有些…

SpringBoot基于哨兵模式的Redis(7.2)集群实现读写分离

文章目录 一、前提条件二、SpringBoot访问Redis集群1. 引入依赖2. yaml配置3. 设置读写分离4. 简单的controller 三、运行四、测试1. 写2. 读3. 额外测试 环境 docker desktop for windows 4.23.0redis 7.2Idea 一、前提条件 先根据以下文章搭建一个Redis集群 Docker-Compo…

C++入门【20-C++ 指针的算术运算】

指针是一个用数值表示的地址。因此&#xff0c;您可以对指针执行算术运算。可以对指针进行四种算术运算&#xff1a;、--、、-。 假设 ptr 是一个指向地址 1000 的整型指针&#xff0c;是一个 32 位的整数&#xff0c;让我们对该指针执行下列的算术运算&#xff1a; ptr 执行 …

FreeRTOS 实时操作系统第九讲 - 链表 (数据结构)

一、链表简述 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点&#xff08;链表中每一个元素称为节点&#xff09;组成&#xff0c;节点可以在运行时动态生成。每个节点包括两个部分&…

Spring整合MyBatis框架!!!

搭建环境&#xff1a; pom.xml: <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></pro…

设计模式:原型模式

原型模式 定义代码实现使用场景 定义 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制现有的对象来创建新对象&#xff0c;而无需从头开始编写代码。在这个模式中&#xff0c;我们可以使用已经存在的对象作为“原型”&…

指定linux文件夹下所有文件赋权命令“chmod -R 755”

仓库&#xff1a;Ai-trainee/GPT-Prompts-Hub 下面我们假设要为&#xff1a;/opt/robot/lib/robot_control/下所有子文件赋权 如果要为 robot_control 目录中的所有文件分配权限&#xff08;在 Linux 术语中也称为“更改文件权限”或“chmod”&#xff09;&#xff0c;则可以…

如何在JS中实现修改URL参数而不刷新页面

可以使用URLSearchParams对象来修改URL参数&#xff0c;而不刷新页面。以下是一个示例代码 // 获取当前URL var url new URL(window.location.href); // 创建URLSearchParams对象 var params new URLSearchParams(url.search);// 修改指定参数的值 params.set(paramName, pa…