VUE快速入门及概念解析

VUE快速入门及概念解析

​ 本文从Vue项目的构建、Vue文件的标准结构,Vue标准使用和Vue与其他的第三方库之间的结构来写。

Vue 项目构建

前期准备

  1. 安装Vue-cli
npm install -g vue-cli
  1. 使用vue-cli构建项目
vue create project-name
  1. 进入该项目文件路径
cd ./project-name

Vue标准项目结构

​ 总体结构

├── README.md
├── babel.config.js
├── node_modules # 导入模块
├── package.json # 项目配置中心
├── public 
├── src # 项目源码地址
└── yarn.lock

​ src结构

├── App.vue # 项目根文件
├── assets
│   └── logo.png
├── components # 项目VUE组件位置
│   └── HelloWorld.vue
├── main.js# 项目入口js文件
├── router # 项目路由
│   └── index.js
├── store # vuex入口
│   └── index.js
└── views # 项目展示文件地址
    ├── About.vue
    └── Home.vue

VUE文件结构

​ vue的文件结构可以分为以下三个部分

  • template:html模版书写位置

  • script:当前vue组件的js书写位置

  • style:当前vue组件的css书写位置

    文件结构如下:

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'Home',
  components: {
    HelloWorld
  }
}
</script>

​ 下面对其进行分组介绍

template区

​ template区主要进行HTML节点的编写,包含我们自己创建的vue组件生成的html节点和vue以及其他第三方库的html节点。这里就是VUE框架各个组件结合使用的地方。

​ 在template区中,可以在节点的text区编写js语言但要被"{{}}"包含在其中。例如

<template>
	<div>
    <p>
      {{flag ? "flag is true" : flag is false}}
    </p>
  </div>
</template>

​ 也可以在节点的属性区域编写js语言,但一般会将复杂的js语句放到stcript区域的methods中或是vue3的setup方法中。

template>
	<div>
    <p hide="{{flag ? "flag is true" : flag is false}}">
      hello
    </p>
  </div>
</template>
vue指令

​ 在template区域中,其实最重要的使用是vue指令;包含了vue自带的指令和我们自定义的指令

自带指令的使用

​ 自带指令列表

指令作用
v-if用于判断当前dom是否需要渲染
v-elseelse
v-else-ifelse if
v-on用于绑定事件
v-for用于列表元素的渲染
v-show用于绑定dom的hide属性的值
v-model用于绑定表单的输入,也可用于绑定父子组件数据
v-bind用于绑定js对象的值和属性的值,可用于父子组件的单向数据传值
v-html直接输出html
v-pre跳过这个元素和它的子元素的编译过程
v-once只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过
v-memo该指令接收一个固定长度的数组作为依赖值进行记忆比对。如果数组中的每个值都和上次渲染的时候相同,则整个该子树的更新会被跳过
v-is已在 3.1.0 中被废弃。请换用带有 vue: 前缀的 is attribute

​ 指令的具体使用可以参照vue官方文档,本文仅编写一些常用案例

判断
属性变量绑定:v-bind
事件监听:v-on
dom展示:v-show
表单输入绑定:v-model
自定义指令

​ 在VUEScript域中介绍

Slot插槽

​ 父组件的template域中使用子组件。但是子组件中的插入其他标签。此时子组件中可以使用slot标签来获取父组件中插入的其他标签。类似于一个占位符。组件中的插槽数量并没有设置限制,可以有多个插槽。

keep-alive标签

​ 用于动态组件的状态保持;例如在一个spa项目中;我们通过点击标签页来切换工作区中的显示内容,每次切换如果没有特定的配置,则会导致每一次切换都会重新渲染界面。为了使组件保持切换前的状态,我们可以使用keep-alive去包裹动态组件的component标签。

Script域

​ Script域主要用于编写当前vue对象的一些成员属性。在vue3中添加了组合式API,但选项式API仍然可以使用。

选项式API
成员用途
data当前vue对象中使用的内部属性,自定响应式
props当前vue对象暴露给父组件的数据接口,父组件可以在子组件的属性上通过数据绑定来进行数据的单向传递
computed计算属性,提供了缓存,并可以直接在template域中通过函数名直接使用
methods组件方法可以在这中进行定义
watch监听器方法,格式为 dataName(oldVlaue,newValue){}
emits声明组件自定义事件声明,用于子组件向父组件传值
expose声明组件对外暴露的函数名或是data名
render用于通过js直接创建html标签
directives用于自定义指令的声明和定义
components用于注册当前vue组件,需要使用的组件
mixins用于分发Vue组件中可复用的功能,但是会出现命名冲突。vue3推荐使用setup
extends用于声明组件之间的继承关系
provide声明当前组件对其子组件及其孙组件等提供的值
inject声明当前组件使用其父组件或是更高位组件的值
setup组合式API入口
name组件名称
inheriAttrs属性继承开关
compilerOptions配置运行时编译器的选项
delimiters从 3.1.0 开始被废弃。请换用 compilerOptions.delimiters
常用API合集


<script>
export default {
  props:[],
  data:[]
}
</script>
自定义指令
provide & inject
组合式API:

​ 组合式API的入口函数为setup(props,context),其出现的目的就是为了替换mixins选项式API,提供组件公共属性和逻辑的复用。setup函数在组件被创建之前,props被解析之后执行。

​ 为何setup相对于mixins来说提高了组件的复用性。一般复用的逻辑我们会考虑单独放在一个js或是ts文件中。如果使用mixins,我们会将一个或是多个的复用逻辑文件引入,多个复用逻辑中就会出现命名冲突和数据来源不清楚的缺陷,因为vue在其中使用了共用代码。

​ 而如果使用了setup,我们也可以使用外部文件引入复用的逻辑和属性。但是在引用时相对于mixins的隐式引用,我们需要声明式的引用;这样变量的命名冲突就解决了。再者调用复用文件中的方法如果需要传参,则需要显式的传递给该函数;这也保证了数据的来源去向更加明确。

https://blog.csdn.net/weixin_33389310/article/details/112314108

​ 如何使用组合式API

setup方法的使用

​ 首先setup本身需要以选项式API的方式在组件中声明使用,可以接受props和context两个参数,并返回需要暴露给组件使用的方法(普通方法或渲染函数)或属性。

  • props:组件的props选项,并且该props对象具有响应性,此时可以使用watchEffect或是watch进行监听;如果对其进行结构则会失去响应性。
  • context:上下文对象,其提供了三个对象和一个函数
    • attrs:等于$attrs
    • slots:等于$slots
    • emit:等于$emit
    • expose:函数,和return值不同,setup的return只能被组件内和模版中访问,而expose函数暴露的属性可以通过$refs在组件外访问。

组合式API相关函数

​ 组合式API的相关函数需要从vue中导入使用

函数功能用法引入
ref把setup函数中不可响应的基础类型数据变成响应数据const name = ref(‘ldh’)const{ref} = Vue;
reactive把setup函数中不可响应的非基本数据类型变为响应数据const name = reactive({name: ‘ldh’})const {reactive} = Vue;
readonly在setup()函数中把一个响应式引用变成只读属性,如果改变就会报错。const {readonly} = Vue;
toRefs把响应式数据进行解构返回,在模板中就可以直接使用了。const { name } = toRefs(person)const {toRefs} = Vue;
computed随着一个变量的变化,而随之变化的方法,也叫计算函数/计算属性const countNew=computed(()=>{return count.value +5})const {computed} = Vue;
watch对setup函数里某个值的变化进行监听,可以得到变化后的值和变化前的值。第一次不会执行,只有变化时才会执行。watch(name,(currentValue,prevValue)=>{console.log(currentValue,prevValue)})const {watch} = Vue;
watchEffect和watch( )函数基本一样,但是它是立即执行,不需要传递侦听内容,自动会感知代码依赖,不需要传递很多参数,只要传递一个回调函数watchEffect(( )=>{})const {watchEffect} = Vue;
provide在setup函数中向子组件或者孙子组件进行传值(可跨层级进行传值)provide(‘name’,‘ldh’)const {provide} = Vue;
Inject在setup函数中父组件传递过来的值(可跨层级进行接受)inject(‘name’,‘hello’) , hello为传递值,不存在时的默认值const {inject} = Vue;

​ 组合式API中的生命周期函数

函数名称功能描述
onBeforeMount( )在Vue应用被挂载之前,自动执行的函数
onMounted( )在Vue应用挂载完成之后,自动执行的函数
onBeforeUpdate()在数据发生变化之前,自动执行的函数
onUpdate()在数据发生变化之后,自动执行的函数
onBeforeUnmount()在组件销毁之前,自动执行的函数
onUnmount()在组件销毁之后,自动执行的函数
onRenderTracked()在收集响应时依赖时,自动执行的函数
onRenderTriggered()每次处罚页面渲染被触发时,自动执行的函数

style域

style域则是对当前组件的css样式渲染,这里不再过多赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值