Vue-4

Vue-4: 组件通信学习 Vue组件通信 父子通信和非父子通信 (v-model详解 、.sync修饰符 、ref 和 $refs 、$nextTick) 阅读详情

自定义创建项目

目标:基于 VueCli 自定义创建项目架子

大致步骤:

  • 安装脚手架
  • 创建项目 vue create 项目名称
  • 选择自定义 选择 Manually select features 这一项
step-1:
	按下空格 : 选择/取消--勾选
	请选择:Babel、Router、CSS、Linter

step-2:
关于 history 模式:不选择启用

step-3:
	选择启用 Less
	
step-4:
	选择使用"无分号规范"——ESLint + Standard config

step-5:
	选择 Lint on save

step-6:
	选择"In dedicated config files" 将配置文件放在单独文件中

step-7:
	Save this as a preset for future projects? (选择 no)

ESlint 代码规范

代码规范:一套写代码的约定规则

规范的作用:正规的团队需要统一的编码风格

JavaScript Standard Style 规范说明:https://standardjs.com/rules-zhcn.html

代码不规范的解决方案:

  • 手动修正:根据命令行的语法报错提示去修改
  • 自动修正:借助 vscode 插件 ESLint 高亮错误,并通过一些配置,实现自动帮助我们修复错误

认识 vuex

介绍

vuex 是一个 vue 的状态管理工具(插件),状态就是数据,它可以帮助我们管理 vue 通用的数据(多组件共享的数据)

场景

多个组件共同维护一份数据(购物车)

优势

  • 共同维护一份数据,数据集中化管理
  • 响应式变化
  • 操作简洁(vuex 提供了一些辅助函数)

其他

state		仓库,用来存放数据
mutations	修改,用来修改数据
actions		异步,用力管理异步
getters		获取,用来筛选结果

state

// 这里面存放的就是vuex相关的核心代码
import Vue from 'vue'
import Vuex from 'vuex'

// 插件安装
Vue.use(Vuex)

// 创建仓库
const store = new Vuex.store({
    // 通过 state 可以提供数据(所有组件共享这一份数据)
    state: {
        title: '大标题',
        count: 100
    }
})

// 导出给main.js使用
export default store
import Vue from 'vue'
import App from './App.vue'
import store from '@store/index'

Vue.config.productionTip = false

new Vue({
	render: h => h(App),
	store
}).$mount('#app')
<template>
	<div>
        {{ $store.state.title }}
    </div>
</template>

mutations

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// 创建仓库
const store = new Vuex.store({
    // 严格模式(有利于初学者,检测不规范的代码)
    strict:true,
    // 1. 通过 state 可以提供数据
    state: {
        title: '大标题',
        count: 100
    }
    // 2. 通过 mutations 可以提供修改数据的方法
    mutations: {
    	// 所有 mutation 函数,第一个参数,都是 state
    	addCount (state, n) {
    		// 修改数据
    		state.count += n
		},
        changeTitle (state) {
            state.title = '临时标题'
        }
	}
})

// 导出给main.js使用
export default store
<template>
	<div>
        <button @click="handleAdd(1)">值 + 1</button>
        <button @click="handleAdd(5)">值 + 5</button>
        <button @click="handleTitle">改变标题</button>
    </div>
</template>

<script>
    export default {
		name: 'test',
        methods: {
            handleAdd (n) {
                this.$store.commit('addCount', n)
            },
            handleTitle () {
                this.$store.commit('changeTitle')
            }
        }
	}
</script>

mapMutations

mutations: {
	subCount (state, n) {
		state.count -= n
	}
}
import mapMutations from 'vuex'

methods: {
	subCount (n) {
		this.$store.commit('subCount', n)
	}
}

// 上面的代码等价于下面的

methods: {
	...mapMutaions(['subCount'])
}
this.subCount(10)	// 调用

actions

mutations: {
	changeCount (state, newCount) {
		state.count = newCount
	}
}
action: {
	setAsyncCount(context, res) {
		// 这里是用setTimeout模拟异步,以后大部分场景是"发送请求"
		setTimeout(() => {
			context.commit('changeCount', res)
		}, 1000)
	}
}
this.$store.dispatch('setAsyncCount', 200)

mapActions

actions: {
	changeCountAction (context, num) {
		setTimeout(() => {
			context.commit('changeCount', num)
		}, 1000)
	}
}
import mapActions from 'vuex'

methods: {
	changeCountAction (n) {
		this.$store.dispatch('changeCountAction', n)
	}
}

// 上面的代码等价于下面的

methods: {
	...mapActions(['changeCountAction'])
}
this.changeCountAction(666)		// 调用

getters

state: {
	list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
getters: {
	filterList (state) {								// 形参第一个参数必须是state
		return state.list.filter(item => item > 5)		// 必须要有返回值
	}
}
<div>{{ $store.state.list }}</div>				<!-- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] -->
<div>{{ $store.getters.filterList }}</div>		<!-- [6, 7, 8, 9, 10] -->

vuex 模块化

出现的问题:

由于 vuex 使用单一状态树,应用的所有状态会集中到一个比较大的对象
当应用变得非常复杂时,store 对象就有可能变得相当臃肿
即:当项目变得越来越大的时候,vuex 会变得越来越难以维护

解决的办法:

在这里插入图片描述

使用模块化管理,在 store/modules 文件夹下创建你需要的模块,例如:

  • store/modules/user.js
const state = {
  userInfo: {
    name: 'zs',
    age: 18
  },
  score: 80
}
const mutations = {}
const actions = {}
const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}

在 store/index.js 文件里使用你创建的模块

  • store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'

Vue.use(Vuex)

const store = new Vuex.Store({
  strict: true,
  state: {
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  // 使用模块
  modules: {
    user,
  }
})

export default store

访问方式

  • 方式一
<div>{{ $store.state.user.userInfo.name }}</div>
  • 方式二
<script>
import { mapState } from "map";
export default {
  computed: {
    ...mapState(["user"]),
    ...mapState("user", ["userInfo"]),
  },
};
</script>
2025年春科研论文写作指导(如何写好科研论文)研究生网课期末考试 希望能帮助到大家 阅读详情

相关推荐

使用Typora时LaTeX内联公式简单汇总

0、前言 在使用Typora写笔记时,有时候需要添加上LaTeX排版的公式。以下是整理出的一份简单笔记,方便记忆不清楚时查阅。笔记暂时不够完善,之后再补充。 注:有些公式语法KateX不能解析,但在Typora中可以使用(不用在意) 1、一些基本内联公式 位置关系 展示 LaTeX 说明 x2x^{2}x2 x^{2} 右上标 x2x_{2}x2​ x_{2} 右下标 2x{}^{2}x2x {}^{2}x 左上标 2x{}_{2}x2​x {}_{2}x 左下标

白白旧维的博客 4438

vue-4

style的默认样式是作用到哪里的?scoped的作用是什么?style中推不推荐加scoped?data写成函数的目的是什么?组件通信,就是指组件与组件之间的数据传递组件的数据是独立的,无法直接访问其他组件的数据。想使用其他组件的数据,就需要组件通信组件关系分类有哪两种父子组件通信的流程是什么?父向子子向父组件上 注册的一些 自定义属性1.非父子组件传值借助什么?2.什么是事件总线3.发送方应该调用事件总线的哪个方法4.接收方应该调用事件总线的哪个方法。

qq_40589140的博客 1822

串口接收完整一帧数据包的3种方法

本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在中断中将接收到的数据存放到buf中进行保存,但是数据的发送和接收都是按照帧为单位进行传输的,因此我们要在接收数据的同时判断当前接收的数据是否是完整的一帧。 一般串口完整数据帧的定义:帧头(2字节,例如AA、BB) + 数据长度(2字节) + 数据+ CRC16校验(2字节) + 帧尾(2字节) 帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校...

爱吃鱼的猫 6万+

官宣!Vue 4 要来了!一文读懂 Vue 4 的颠覆性变化与全新特性

好家伙,前端圈又过年了。Vue 官方正式官宣下一代大版本 Vue 4 的发布计划,这一次不是简单的小修小补,而是一场直击框架底层的"手术"——Vapor 模式正式转正、虚拟 DOM 不再是必选项、打包体积直接砍掉一半多、还接轨了 React Server Components。

李赛赛的专栏 1758

计算机三级考试嵌入式系统重点精简汇总

第一章 嵌入式系统概论 1.1.1嵌入式系统 (1)特点:(1)专用性;(2)隐蔽性;(3)资源受限;(4)高可靠性;(5)实时性;(6)软件固化。 (2)应用:(1)冰箱、洗衣机、电饭煲、空调、摄影机、DVD播放器等;(2)数控机床、飞机、汽车、电梯、X光机、血压计等;(3)电话机、传真机、打印机、pos机、GPS导航仪、路由器等。 1.1.2嵌入式系统组成与分类 (1)逻辑组成:硬件和软件,分为处理器、存储器、I|0设备与I|O接口,数据总线; (2)处理器:分为主处理器(CPU)和协处

chemkrik的博客 1万+

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

Vue4进阶指南:从零到项目实战(上)

当您翻开本书的篇章,您开启的不仅是一段技术旅程,更是与现代前端之美的相遇。Vue.js 以其渐进式的哲学、响应式的魔法和组件化的艺术,十年间照亮了无数开发者的创造之路。而今 Vue4 携更强大的类型支持、更极致的性能优化、更深刻的 TSX 融合而来,我们站在了探索前端优雅范式的新起点。 Vue4 不是升级,而是进化。以 响应式魔法 为舟,TSX 类型 为桨,穿越Composition的星河,登陆工程化的彼岸。从第一行模板到架构设计,本书将黑暗中的摸索变为星光下的航路。启程吧,资深开发者的蜕变就在此刻。

YunWisdom 3013

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2165

Vue - 4( 8000 字 Vue2 入门级教程)

Vue2 框架入门级教程第四篇,8000字详解

weixin_73232539的博客 1500

基于ZYNQ PL的AD7606数据采集与FFT实时频谱分析:从硬件到创新实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKnmpgJm-1750295287594)(https://example.com/fft_plot.png)]本文涉及代码已在Xilinx ZCU102开发板与AD7606评估板上验证通过,采样率支持200KSPS@8通道,FFT计算延迟<1ms。传统MCU+DSP方案难以兼顾速度与功耗,而ZYNQ的PL+PS架构为这一问题提供了完美解决方案。本文实现的ZYNQ PL方案突破了传统处理器的性能瓶颈,通过。

QQ_778132974的博客 338

杰理 JL701N/JL703N USB MIDI 使用教程

摘要:本教程介绍如何在杰理JL701N/JL703N音箱的可视化SDK中配置USB MIDI功能。主要步骤包括:1)启用PC模式;2)修改SDK宏定义启用USB MIDI;3)实现MIDI数据接收处理逻辑;4)调用接口发送MIDI数据;5)使用MIDI-OX测试功能。针对低版本SDK可能出现的设备识别问题,提供了在midi.c文件中添加特定代码行的解决方案。使用前需确保SDK版本达标,并注意备份原始文件。

qq_42014563的博客 1263

IdentityServer4VueJs 项目教程

IdentityServer4VueJs 项目教程 1. 项目的目录结构及介绍 IdentityServer4VueJs/ ├── .github/ │ └── workflows/ ├── ResourceServer/ ├── StsServer/ ├── VueJsOidcClient/ │ └── vue-js-oidc-client/ ├── .gitignore ├── LIC...

gitblog_00338的博客 511

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IdentityServer4VueJs 项目常见问题解决方案

IdentityServer4VueJs 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 IdentityServer4VueJs 是一个开源项目,它整合了 IdentityServer4 和 Vue.js,用于在 Vue.js 应用中实现基于 OpenID Connect 的认证流程。该项目主要通过 PKCE (Proof Key for Code Exchange) 方法实现 OAut...

gitblog_00401的博客 430

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

在webpack4.0中使用vue的配置过程

哈哈哈

鸭绒的博客 1339

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Webpack4学习笔记(六)——Webpack4+VueJS2项目搭建

这是一个关于Webpack4的文章系列,其中包含以下文章: Webpack4学习笔记(一)——基本使用 Webpack4学习笔记(二)——代码分割(单入口) Webpack4学习笔记(三)——代码分割(多入口) Webpack4学习笔记(四)——CSS处理 Webpack4学习笔记(五)——分离production和development环境 Webpack4学习笔记(六)——Webp...

今天又懒得加班 263

bootstrap 精美_基于Bootstrap 4和Vuejs构建的精美资源

bootstrap 精美 Vue Light Bootstrap仪表板 (Vue Light Bootstrap Dashboard) Vue Light Bootstrap Dashboard is a beautiful resource built over Bootstrap 4 and Vuejs. Vue Light Bootstrap仪表板是建立在Bootstrap 4和Vuejs...

cuk5239的博客 288

【Vuejs】866- Vuex 4 正式发布:打包现在与 Vue 3 一致

作者 | Vuex 官方博客译者 | 王强策划 | 李俊辰 来源 |前端之巅Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。Vuex 采用集中式存储管理应用的...

pingan8787 524

【Vuejs】2135- 理解 Vue 3.4 中的 defineModel() 宏

v-model 可以在组件上使用以实现双向绑定。从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏:<!-- Child.vue --> <script setup> const model = defineModel() function update() { model.value++ } </script> <...

pingan8787 289

Vuejs另辟蹊径4(引入vue)

引入vue.js 在指定文件下执行命令 npm install vue@2.5.21 --save F:\IdeaProjects\LearnVuejs04-v2\01-webpack的使用\04-webpack配置vue>npm install vue@2.5.21 --save npm WARN css-loader@2.0.2 requires a peer of webpack@^4.0.0 but none is installed. You must install peer depe

qq_40649503的博客 273

探索VueBoot:将Bootstrap v4的魔力融入Vue世界

???? 探索VueBoot:将Bootstrap v4的魔力融入Vue世界???? 在寻找完美结合VueJS与Bootstrap v4力量的解决方案吗?尽管VueBoot已不再维护,但其背后的灵感和实现依然值得我们深入探索,并且对于那些寻求复古魅力或特定场景应用的开发者而言,它依旧是一份宝贵的遗产。让我们一起重温这个曾经充满活力的项目,挖掘它的独特价值。 项目介绍 VueBoot,一个曾致力于将Bootst...

gitblog_01129的博客 507

vue和vuejs区别_D3vue-VueJS的D3插件

vue和vuejs区别 D3vue (D3vue) D3 integration with Vue.js. 与Vue.js的D3集成。 View demo 查看演示 Download Source 下载源 d3vue is a plugin for VueJS 2 that allows you to take data from your Vue instance and bind ...

cuk5340的博客 3280

YDOOK:vue3:vue-cli4: 嵌套路由官方实例 用法详细教程

Python 光速入门 56:占位 - YDOOK

YDOOK 314

vuejs知乎_Vue Router 4.0 正式发布!焕然一新。

这个月,Vue Router 4 正式发布稳定版本。在经历了 14 个 Alpha,13 个 Beta 和 6 个 RC 版本之后,Vue Router v4 闪亮登场,为你带来了 TypeScript 集成、新功能以及对现代应用程序的一致性改进,已经准备好成为 Vue3 新应用的最佳伴侣。将近 2 年的时间,大约 1500 次提交,15 个RFC[1],无数的心血……以及许多用户的帮助以及他们的...

weixin_36280492的博客 278

vuejs学习5.4 vue-router

vue-router$route和 $router的区别导航守卫 $route和 $router的区别 $route表示活跃的路由 $router表示vue-router对象 导航守卫

qq_39225271的博客 275

VueJS 基础部分-Vue CLI(4)

Vue CLI 13.1 什么是 Vue CLI 网站地址:cli.vuejs.org 脚手架是什么东西 CLI 依赖 webpack ==> node 中的 npm 安装 CLI3->拉去 CLI2 模块 npm install -g @vue/cli 13.2 CLI2 初始化项目的过程 配置相关文件 vue init webpack `项目名称` 13.3 CLI2 生产的目录结构的解析 13.4 runtime-complier 和 runtime-only 的区别 r

weixin_46056955的博客 142

vuejs学习3.4 webpack基本使用——配置Vue

配置Vue下载使用vue真实代码el和template区别代码抽取抽取一抽取二抽取三安装vue-loader vue-template-compiler配置 下载 下载特定版本 npm install vue@2.6.11 --save 使用vue //后面必须是小写的vue import Vue from "vue" const app = new Vue({ el:"#app", data:{ message:"我是message", }, }) <div id="ap

qq_39225271的博客 811
上一篇: 如何删除右键菜单中的WPS与百度网盘
下一篇: Vue-5
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值