vue3学习笔记

这篇具有很好参考价值的文章主要介绍了vue3学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3学习笔记

源码升级

  1. Vue2是通过Object.defineProperty实现响应式,Vue3是通过Proxy实现响应式
  2. 重写虚拟DOM的实现和Tree-Sharking

一、创建Vue3工程

1.1 使用Vue-cli创建

官方文档:Vue-cli

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version   vue -V
## 安装或者升级你的@vue/cli
npm install -g @vue/cli
## 创建
vue create vue_test
## 启动
cd vue_test
npm run serve

1.2 使用Vite创建

官方文档:V3

vite官网:Vite

## 创建工程 
npm init vite-app <myapp>
## 进入工程目录
cd <myapp>
## 安装依赖
npm install
## 运行
npm run dev

什么是vite?—— 官网定义是下一代前端构建工具。

优势如下:

  • 开发环境中,无需打包操作,可快速的冷启动。
  • 轻量快速的热重载(HMR)。
  • 真正的按需编译,不再等待整个应用编译完成。

传统构建图

vite构建

1.3 分析工程结构

vue-cli创建工程结构

D:\vscode\vue3-combat
├── public
|  ├── favicon.ico
|  └── index.html
├── src
|  ├── assets
|  |  └── logo.png
|  ├── components
|  |  └── HelloWorld.vue
|  ├── App.vue
|  └── main.js
├── babel.config.js
├── jsconfig.json
├── package-lock.json
├── package.json
├── README.md
└── vue.config.js 

main.js

-----------Vue3-------------------------
import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)
app.mount('#app')
-----------Vue2-------------------------
import Vue from 'vue'
import App from './App'

const vm = new Vue({
    render:h=>h(App)
})
vm.$mount('#app')
  1. Vue2中是new Vue的构造函数 VUe3是引入createApp的工厂函数
  2. 上述app实际上比vm更

App.vue

对比Vue2,发现:模板语法可以没有根标签

二、常用Composition Api

常用的组合式api

2.1 setup

setup:Vue3中的新的配置项,是一个函数,是所有组合式api的表演台,也可以理解为一个语法糖

功能:

  • 组件中所用到的:数据、方法等等,均要配置在setup中。

写法1:

<script>
import {ref} from 'vue'
export default {
   setup(){
        //因为setup里面的数据是没有响应式的,所以这里需要借助ref属性,ref属性需要从vue中按需引入
        //简单的来说ref就是将简单数据类型变为响应式数据,从而达到点击改变文字的效果。
        //值得注意的是在使用了ref后想要改变属性内容就需要.value(想要更多了解ref的可以自行查询,这里不做过多解释)
         const text =ref('Hello Vue')
         const btn=()=>{
             text.value='我爱VUE'
         }

     return{ text, btn}
    }
}
</script>

【推荐】写法2:

<template>
  <button @click="btn"> {{ text }}</button>
</template>

<script setup >
import { ref } from 'vue'
const text = ref('Hello Vue')
const btn = () => {
  text.value = '我爱VUE';
}

</script>

注意点:

不和Vue2.x混用

  1. Vue2.x配置(data、methos、computed…)中可以访问到setup中的属性、方法。
  2. 但在setup中不能访问到Vue2.x配置(data、methos、computed…)。
  3. 如果有重名, setup优先。

2.2 ref函数

作用:直接定义一个响应式数据,区分开Vue2.x用Object.defineProperty的方式

不同于ref属性(仍然可以使用)

<script setup >
import { ref } from 'vue'
const text = ref('Hello Vue')
</script>

这里的text变成了refimpl引用实现对象,要想变成响应式数据就要用到ref,refImpl{ getter/setter value }实际上就是数据劫持

如果是对象类型,会生成proxy对象,就不需要在内置属性加value

注意点:

  • 接收的数据可以是:基本类型、也可以是对象类型。
  • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。
  • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。

2.3reactive函数

  • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)
  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)
  • reactive定义的响应式数据是“深层次的”。
  • 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

例如

<script setup lang="ts">
import { reactive } from 'vue'

const obj = reactive({ number: 0 })
</script>

2.4Vue3的响应式

Vue2.x中的响应式
  • 实现原理:

    • 对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。

    • 数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)。

      let p = {
          age : 22,
          name : 'yovvis'
      }
      
      let person = {}
      
      Object.defineProperty(person,'age',{
      	value: 18ennumberable: true, // 控制属性是否可以被枚举,默认值是false
      	writable: true,     // 控制属性是否可以被修改,默认值是false
      	configurable: true  // 控制属性是否可以被删除,默认值是false
      
      	// 当有人读取person的age属性时,get函数(getter)就会被调用,返回就是age值
      	get(){
      		console.log("有人读取age属性了");
      		return number
      	},
      
      	// 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改值
      	set(value){
      		console.log('有人读取age属性了');
      		number = value
      	}
      
      })
      
  • 存在问题:

    • 新增属性、删除属性, 界面不会更新。(这里需要用到vc.$set())
    • 直接通过下标修改数组, 界面不会自动更新。
Vue3.x中的响应式

借助window.proxy window.Reflect(对比object.defineProperty多了返回值)

  • 实现原理:

    • 通过Proxy(代理): 拦截对象中任意属性的变化, 包括:属性值的读写、属性的添加、属性的删除等。

    • 通过Reflect(反射): 对源对象的属性进行操作。

    • MDN文档中描述的Proxy与Reflect:

      • Proxy:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

      • Reflect:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect

        new Proxy(data, {
        	// 拦截读取属性值
            get (target, prop) {
            	return Reflect.get(target, prop)
            },
            // 拦截设置属性值或添加新属性
            set (target, prop, value) {
            	return Reflect.set(target, prop, value)
            },
            // 拦截删除属性
            deleteProperty (target, prop) {
            	return Reflect.deleteProperty(target, prop)
            }
        })
        
        proxy.name = 'tom'   
        

proxy解决了vue2中数组数据的响应式

2.5 reactive对比ref

三个角度

  • 从定义数据角度对比:
    • ref用来定义:基本类型数据
    • reactive用来定义:对象(或数组)类型数据
    • 备注:ref也可以用来定义对象(或数组)类型数据, 它内部会自动通过reactive转为代理对象
  • 从原理角度对比:
    • ref通过Object.defineProperty()getset来实现响应式(数据劫持)。
    • reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。
  • 从使用角度对比:
    • ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value
    • reactive定义的数据:操作数据与读取数据:均不需要.value

2.6 计算属性与监视

computed
  • 与Vue2.x中computed配置功能一致

  • 写法

    <script setup >
    
    import {computed} from 'vue'
    
    	//计算属性——简写
      const fullName = computed(()=>{
            return person.firstName + '-' + person.lastName
        })
        //计算属性——完整
        const fullName = computed({
            get(){
                return person.firstName + '-' + person.lastName
            },
            set(value){
                const nameArr = value.split('-')
                person.firstName = nameArr[0]
                person.lastName = nameArr[1]
            }
        })
    }
    </script>
    
    
watch
  • 与Vue2.x中watch配置功能一致

  • 两个小“坑”:

    • 监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
    • 监视reactive定义的响应式数据中某个属性时:deep配置有效。
//情况一:监视ref定义的响应式数据
watch(sum,(newValue,oldValue)=>{
	console.log('sum变化了',newValue,oldValue)
},{immediate:true})

//情况二:监视多个ref定义的响应式数据
watch([sum,msg],(newValue,oldValue)=>{
	console.log('sum或msg变化了',newValue,oldValue)
}) 

/* 情况三:监视reactive定义的响应式数据
			若watch监视的是reactive定义的响应式数据,则无法正确获得oldValue!!
			若watch监视的是reactive定义的响应式数据,则强制开启了深度监视 
*/
watch(person,(newValue,oldValue)=>{
	console.log('person变化了',newValue,oldValue)
},{immediate:true,deep:false}) //此处的deep配置不再奏效

//情况四:监视reactive定义的响应式数据中的某个属性
watch(()=>person.job,(newValue,oldValue)=>{
	console.log('person的job变化了',newValue,oldValue)
},{immediate:true,deep:true}) 

//情况五:监视reactive定义的响应式数据中的某些属性
watch([()=>person.job,()=>person.name],(newValue,oldValue)=>{
	console.log('person的job变化了',newValue,oldValue)
},{immediate:true,deep:true})

//特殊情况
watch(()=>person.job,(newValue,oldValue)=>{
    console.log('person的job变化了',newValue,oldValue)
},{deep:true}) 
//此处由于监视的是reactive素定义的对象中的某个属性,所以deep配置有效

对于ref定义的基本类型不需要.value,对于refImpl{ }对象里面任何一个属性变化都能监视到。

let person = {
    name:''age:12,
}
watch(person,(newValue,oldValue)=>{
    
})

watch(person.value,(newValue,oldValue)=>{
    
})
// 这里.value是实际上是监测地址有没有变化,也就是说实际上value是通过proxy生成的对象
watchEffect
  • watch的套路是:既要指明监视的属性,也要指明监视的回调。

  • watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。

  • watchEffect有点像computed:

    • 但computed注重的计算出来的值(回调函数的返回值),所以必须要写返回值。
    • 而watchEffect更注重的是过程(回调函数的函数体),所以不用写返回值。
//watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调。
watchEffect(()=>{
    const x1 = sum.value
    const x2 = person.age
    console.log('watchEffect配置的回调执行了')
})

2.7 生命周期

setup()里面组合式api先执行

2.8 自定义Hook函数

把setup里面组合式api封装

创建src/hooks/useXXX.js

很类似mixin混入

2.9 toRef(s)

  • 作用:创建一个 ref 对象,其value值指向另一个对象中的某个属性。

  • 语法:const name = toRef(person,'name')这里直接让name指向了person的地址

  • 应用: 要将响应式对象中的某个属性单独提供给外部使用时。

  • 扩展:toRefstoRef功能一致,但可以批量创建多个 ref 对象,语法:toRefs(person)

案例:

toRef
<script setup >
import { toRef } from 'vue'


let obj = { name: 'alice', age: 12 };
let newObj = toRef(obj, 'name');// toRef的本质时让obj.name的引用指向了变量newObj

newObj.value = 'Tom'; // 由于obj.name的引用地址也指向了newObj所以修改newObj也会修改obj.name的值
console.log(obj, newObj)
</script>

toRefs
<script setup >
 import { toRefs } from 'vue'
 let obj = { name: 'alice', age: 12 };
    
let { name, age } = toRefs(obj); // toRefs的本质是让obj.name和obj.age的引用指向了变量name和age
name.value = 'Tom'; // 由于obj.name的引用地址也指向了name所以修改name也会修改obj.name的值
age.value = 18; // 由于obj.age的引用地址也指向了age所以修改age也会修改obj.age的值
console.log(obj, name, age)
    
</script>

三、其它Composition API

3.1 shallowReactive/Ref

  • shallowReactive:只处理对象最外层属性的响应式(浅响应式)。

  • shallowRef:只处理基本数据类型的响应式,不处理对象数据。

  • 什么时候使用?

    • 如果有一个对象数据,结构比较深, 但变化时只是外层属性变化 ===> shallowReactive。
    • 如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换 ===> shallowRef。
shallowReactive
const state = shallowReactive({
  foo: 1,
  nested: {
    bar: 2
  }
})

// 改变 state 本身的性质是响应式的
state.foo++
// ...但是不转换嵌套对象
isReactive(state.nested) // false
state.nested.bar++ // 非响应式


shallowRef
<template>
  <div @click="ageAdd">

    <button>name:{{ shallowRefObj.name }} </button>
    <button>age:{{ shallowRefObj.age }} </button>
  </div>
</template>

<script setup >
    
const shallowRefObj = shallowRef({ name: 'alice', age: 12 });

const ageAdd = () => {

  shallowRefObj.value.name = 'Tom';

  shallowRefObj.value.age++
 console.log(shallowRefObj.value) //值会变化,视图不会更新
}
</script>

3.2 shallow(readonly)

其他组件给了响应式数据,然后本组件不能修改

  • readonly: 让一个响应式数据变为只读的(深只读)。

    const person = readonly(person) //处理完了队person对象覆盖
    
  • shallowReadonly:让一个响应式数据变为只读的(浅只读)。

  • 应用场景: 不希望数据被修改时。

3.3 (to/mark)Raw

  • toRaw:

    • 作用:将一个由reactive生成的响应式对象转为普通对象
    • 使用场景:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面更新。
  • markRaw:

    • 作用:标记一个对象,使其永远不会再成为响应式对象。

      let car ={
          name :'奔驰',
          price : 20,
      }
      person.car = car;// 这里就是通过proxy将car变成了响应式对象,
      person.car = markRow(car) //标记完就直接原object
      
    • 应用场景:

      1. 有些值不应被设置为响应式的,例如复杂的第三方类库等。
      2. 当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能

3.4 customRef

  • 作用:创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。

  • 实现防抖效果:

<template>
	<input type="text" v-model="keyword">
	<h3>{{keyword}}</h3>
</template>

<script>
	import {ref,customRef} from 'vue'
	export default {
		name:'Demo',
		setup(){
			// let keyword = ref('hello') //使用Vue准备好的内置ref
			//自定义一个myRef
			function myRef(value,delay){
				let timer
				//通过customRef去实现自定义
				return customRef((track,trigger)=>{
					return{
						get(){
							track() //告诉Vue这个value值是需要被“追踪”的
							return value
						},
						set(newValue){
							clearTimeout(timer)
							timer = setTimeout(()=>{
								value = newValue
								trigger() //告诉Vue去更新界面
							},delay)
						}
					}
				})
			}
			let keyword = myRef('hello',500) //使用程序员自定义的ref
			return {
				keyword
			}
		}
	}
</script>

3.5 provide与inject

跨级组件

  • 作用:实现祖与后代组件间通信

  • 套路:父组件有一个 provide 选项来提供数据,后代组件有一个 inject 选项来开始使用这些数据

  • 具体写法:

    1. 祖组件中:
    setup(){
    	......
        let car = reactive({name:'奔驰',price:'40万'})
        provide('car',car)
        ......
    }
    
    1. 后代组件中:
setup(props,context){
	......
    const car = inject('car')
    return {car}
	......
}

3.6 响应式数据的判断

  • isRef: 检查一个值是否为一个 ref 对象
  • isReactive: 检查一个对象是否是由 reactive 创建的响应式代理
  • isReadonly: 检查一个对象是否是由 readonly 创建的只读代理
  • isProxy: 检查一个对象是否是由 reactive 或者 readonly 方法创建的代理

四、Composition API 的优势

4.1 option Api

vue3学习笔记,vue,学习,笔记,vue
vue3学习笔记,vue,学习,笔记,vue

4.2 Composition API

五、新的组件

5.1 Fragment

  • 在Vue2中: 组件必须有一个根标签
  • 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中
  • 好处: 减少标签层级, 减小内存占用

5.2 Teleport

  • 什么是Teleport?—— Teleport 是一种能够将我们的组件html结构移动到指定位置的技术。
<teleport to="移动位置">
	<div v-if="isShow" class="mask">
		<div class="dialog">
			<h3>我是一个弹窗</h3>
			<button @click="isShow = false">关闭弹窗</button>
		</div>
	</div>
</teleport>

5.3 Suspense

  • 等待异步组件时渲染一些额外内容,让应用有更好的用户体验

  • 使用步骤:

    • 异步引入组件
import {defineAsyncComponent} from 'vue'
const Child = defineAsyncComponent( () =>import('./components/Child.vue') )
    • 使用Suspense包裹组件,并配置好defaultfallback

      <template>
      	<div class="app">
      		<h3>我是App组件</h3>
      		<Suspense>
      			<template v-slot:default>
      				<Child/>
      			</template>
      			<template v-slot:fallback>
      				<h3>加载中.....</h3>
      			</template>
      		</Suspense>
      	</div>
      </template>
      

六、其他

6.1全局API的转移

  • Vue 2.x 有许多全局 API 和配置。

    • 例如:注册全局组件、注册全局指令等。

      //注册全局组件
      Vue.component('MyButton', {
        data: () => ({
          count: 0
        }),
        template: '<button @click="count++">Clicked {{ count }} times.</button>'
      })
      
      //注册全局指令
      Vue.directive('focus', {
        inserted: el => el.focus()
      }
      
  • Vue3.0中对这些API做出了调整:

    • 将全局的API,即:Vue.xxx调整到应用实例(app)上

      2.x 全局 API(Vue 3.x 实例 API (app)
      Vue.config.xxxx app.config.xxxx
      Vue.config.productionTip 移除
      Vue.component app.component
      Vue.directive app.directive
      Vue.mixin app.mixin
      Vue.use app.use
      Vue.prototype app.config.globalProperties

6.2其他改变

  • data选项应始终被声明为一个函数。

  • 过度类名的更改:

    • Vue2.x写法

      .v-enter,
      .v-leave-to {
        opacity: 0;
      }
      .v-leave,
      .v-enter-to {
        opacity: 1;
      }
      
    • Vue3.x写法

      .v-enter-from,
      .v-leave-to {
        opacity: 0;
      }
      
      .v-leave-from,
      .v-enter-to {
        opacity: 1;
      }
      
  • 移除keyCode作为 v-on 的修饰符,同时也不再支持config.keyCodes

  • 移除v-on.native修饰符

    • 父组件中绑定事件

      <my-component
        v-on:close="handleComponentEvent"
        v-on:click="handleNativeClickEvent"
      />
      
    • 子组件中声明自定义事件

      <script>
        export default {
          emits: ['close']
        }
      </script>
      
  • 移除过滤器(filter)

    过滤器虽然这看起来很方便,但它需要一个自定义语法,打破大括号内表达式是 “只是 JavaScript” 的假设,这不仅有学习成本,而且有实现成本!建议用方法调用或计算属性去替换过滤器。文章来源地址https://www.toymoban.com/news/detail-518880.html

,
.v-leave-to {
opacity: 0;
}
.v-leave,
.v-enter-to {
opacity: 1;
}
```

  • Vue3.x写法

    .v-enter-from,
    .v-leave-to {
      opacity: 0;
    }
    
    .v-leave-from,
    .v-enter-to {
      opacity: 1;
    }
    
  • 移除keyCode作为 v-on 的修饰符,同时也不再支持config.keyCodes

  • 移除v-on.native修饰符

    • 父组件中绑定事件

      <my-component
        v-on:close="handleComponentEvent"
        v-on:click="handleNativeClickEvent"
      />
      
    • 子组件中声明自定义事件

      <script>
        export default {
          emits: ['close']
        }
      </script>
      
  • 移除过滤器(filter)

    过滤器虽然这看起来很方便,但它需要一个自定义语法,打破大括号内表达式是 “只是 JavaScript” 的假设,这不仅有学习成本,而且有实现成本!建议用方法调用或计算属性去替换过滤器。

到了这里,关于vue3学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 学习笔记之Vue3(七)

    学习笔记之Vue3(七)

    一、Vue3简介 2020年9月18日,Vue.js发布3.0版本, 代号: One Piece (海贼王) 耗时2年多、2600+次提交、 30+个RFC、 600+次PR、 99位贡献者 github 上的tags地址: https://github.com/vuejs/vue-next/releases/tag/v3.0.0 二、Vue3带来了什么 1.性能的提升 打包大小减少41%; 初次渲染快55%,更新渲染快133%; 内存

    2024年02月07日
    浏览(9)
  • Vue3学习笔记(9.6)

    Vue3学习笔记(9.6)

    Vue3混入 混入(mixins)定义了一部分可复用的方法或者计算属性。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。 选项合并 当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合。 比如,数据对象在内

    2023年04月09日
    浏览(13)
  • 【Vue3】学习笔记-生命周期

    【Vue3】学习笔记-生命周期

    Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名: beforeDestroy 改名为 beforeUnmount destroyed 改名为 unmounted Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下: beforeCreate === setup() created ======= setup() beforeMount === onBeforeMount mounted ======= onMo

    2024年02月11日
    浏览(17)
  • 【vue3】学习笔记--组件通信方式

    【vue3】学习笔记--组件通信方式

    学习vue3总是绕不开vue2 vue3组件通信方式如下: props数据只读,从父组件传递到子组件,子组件内部不可直接更改 子组件需要使用defineProps方法接受父组件传递过来的数据 setup语法糖下局部组件无需注册直接可以使用 父组件 子组件 vue框架中事件分为两种:原生的DOM事件和自定

    2024年02月13日
    浏览(16)
  • 【Vue3】学习笔记-新的组件

    在Vue2中: 组件必须有一个根标签 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 好处: 减少标签层级, 减小内存占用 什么是Teleport?—— Teleport 是一种能够将我们的 组件html结构 移动到指定位置的技术。 等待异步组件时渲染一些额外内容,让应

    2024年02月16日
    浏览(29)
  • uniApp -- 学习笔记(vue3+ts)

    uniApp -- 学习笔记(vue3+ts)

    uniApp官网介绍 (一) 个人理解是官网返回一个 SelectorQuery 对象实例。 并且可以在这个实例上使用 select 等方法选择节点,并使用 boundingClientRect 等方法选择需要查询的信息。但是关于这个需要到查询信息,只有打印出来 , 在onReady 调用 let selectorQuery: UniNamespace.SelectorQuery =

    2024年02月09日
    浏览(14)
  • Vue3 学习笔记(Day1)

    Vue3 学习笔记(Day1)

    「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。 目录 0 课程介绍 1 Vue3 简介 2 创建 Vue3 工程 2.1 基于 vue-cli 创建 2.2 基于 vite 创建(推荐) 2.3 一个简单的效果 P1:https://www.bilibili.com/video/BV1Za4y

    2024年02月20日
    浏览(30)
  • Vite+Typescript+Vue3学习笔记

    Vite+Typescript+Vue3学习笔记

    1.1、创建项目(yarn) 1.2、项目配置 1、配置vue文件识别 vite默认情况下不识别.vue后缀的文件,需在vite-env.d.ts配置下 2、Api选择 Vue3推荐使用Composition API,这里关闭Vue2的Option Api 1.3、常用依赖 1、@types/node ts需安装node的类型,否则使用node相关会提示找不到 2、auto-import 用于简化Vu

    2024年02月15日
    浏览(12)
  • Vue3 学习笔记(Day2)

    Vue3 学习笔记(Day2)

    「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. Vue3 学习笔记(Day1) 目录 3 Vue3 核心语法 3.1 选项式API 与 组合式API 3.2 setup 3.3 ref 和 reactive 3.4 computed 3.5 watch 3.

    2024年02月22日
    浏览(30)
  • VUE3 学习笔记(八)引入 EasyUI for Vue

    VUE3 学习笔记(八)引入 EasyUI for Vue

      目录 一、什么是 EasyUI? 二、安装EasyUI for Vue3 1. 使用NPM安装 2. 导入EasyUI 三、安装完成出现问题解决 easyui是一个基于jQuery、Angular、Vue和React的用户界面组件的集合。 easyui为构建现代的、交互式的、javascript应用程序提供了基本功能。 使用easyui,你不需要写很多javascript代码,

    2023年04月21日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包