Vue3学习---【API】【从零开始的Vue3学习!!!】

目录

应用实例API

app.mount()

unmount()

常规API

version

 nextTick()

状态选项API

data()

注意:

methods()

生命周期选项

beforeCreate()和Created()

beforeCreate()

created()

beforeCreate()和created()的区别

beforeMount()和mounted()

beforeMount()

 mounted()

beforeMount()和mounted()区别

beforeUpdate()和updated()

beforeUpdate()

updated()

beforeUpdate()和updated()的区别

应用实例API

app.mount()

  • 将应用实例挂载到一个容器中

使用.mount()挂载时,应当挂载到一个“容器(div、section等)中,而不是某个具体的元素(p、button等)

  •  如果挂载到某个具体元素,而不是容器元素中,则可能会失效
<body>
	<button id="app" @click="trigger">{{count}}</button>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					count:0
				}
			},
			methods:{
				trigger(){
					this.count++;
				}
			}
		});
		app.mount('#app');
	</script>
</body>

上面将应用挂载到了一个按钮上,这是不允许的,此时点击按钮,并不会触发任何方法,正确方法是将应用挂载到一个“容器”元素中,再将button放置到该“容器”元素中 

<button id="app">
    <button @click="trigger">{{count}}</button>
</button>

unmount()

  •  卸载一个已挂载的应用实例,卸载一个应用会触发应用内所有组件的卸载

常规API

version

  • 暴露当前所使用的Vue版本
console.log(Vue.version);

 nextTick()

  • 强制刷新DOM的方法

Vue中更改响应式状态时,最终的DOM更新并不是同步生效的,而是由Vue将它们缓存在一个队列中,直到下一个“tick”才一起更新

nextTick()可以在状态改变后立即使用,等待DOM更新完成

<body>
	<div id="app">
		<button @click="trigger">{{count}}</button>
	</div>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					count:0
				}
			},
			methods:{
				async trigger(){
					this.count++;
					console.log(document.getElementById('app').textContent);
					await Vue.nextTick();
					console.log(document.getElementById('app').textContent);
				}
			}
		});
		app.mount('#app');
		console.log(Vue.version);
	</script>
</body>

 效果:

状态选项API

data()

interface ComponentOptions {
  data?(
    this: ComponentPublicInstance,
    vm: ComponentPublicInstance
  ): object
}

该函数会返回一个普通JavaScript对象Vue会将它转换为响应式对象

实例创建后,可以通过“this.$data”访问该响应式对象,组件实例也代理了该数据对象上所有的属性,因此this.a等价于this.$data.a

  • 所有会用到的顶层数据属性都应该提前在这个对象中声明
  • 尽管可以向this.$data添加新属性,但是不推荐这么做
  • 如果一个属性的值在一开始还获取不到,应当先用undefined或是null值来占位

注意:

以“_”或“$”开头的属性将不会被组件实例代理,因为它们可能和Vue内置属性API方法冲突,你必须以this.$data._property方式来访问它们

<body>
	<div id="app">
		{{a}}
	</div>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					a:100
				}
			},
			created(){
				console.log(this.a);	// 100
			}
		});
		app.mount('#app');
	</script>
</body>
  • 但如果为data属性使用了一个箭头函数,则this将不会指向该组件实例,不过仍然可以使用函数的第一个参数来访问实例
data: (vm) => ({ a: vm.myProp })

methods()

Vue允许我们在应用实例创建时定义方法,它的值是一个对象

例如,下面的代码,在点击按钮后,数字会加1

因此,methods常用来添加某个实例需要用的方法

<body>
	<div id="app">
		<button @click="trigger">{{count}}</button>
	</div>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					count:0
				}
			},
			methods:{
				trigger(){
					this.count++;
				}
			}
		});
		app.mount('#app');
	</script>
</body>

生命周期选项

beforeCreate()和Created()

beforeCreate()

  • 在组件实例初始化完成之后立即调用

beforeCreate()调用时,data()methods()还未被载入,此时无法使用data()中属性和methods中方法

因此,beforeCreate()用于组件实例化之前的准备工作

beforeCreate()中访问不到挂载的DOM节点,因为还没有挂载

created()

  • 在组件实例处理完所有与状态相关的选项后调用

created()中可以调用到data()methods中的属性方法

因此,created()中适合进行数据操作初始化

created()中访问不到挂载的DOM节点,因为还没有挂载

beforeCreate()和created()的区别

<body>
	<div id="app">{{content}}</div>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					content:"我是一个内容"
				}
			},
			beforeCreate(){
				console.log("beforeCreate:",this.content);
			},
			created(){
				console.log("created:",this.content);
			}
		});
		app.mount('#app');
	</script>
</body>

效果:

beforeMount()和mounted()

beforeMount()

  • 在组件被挂载之前调用

在组件即将被挂载之前调用,此时组件已经实例化完成,所以可以调用到data()、methods(),但不能通过this.$el访问到挂载的dom节点

 mounted()

  • 在组件被挂载后调用

在组件挂载时调用,此时组件已经实例化完成,所以可以调用到data()、methods(),可以通过this.$el访问到挂载的dom节点

beforeMount()和mounted()区别

<body>
	<div id="app">{{content}}</div>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					content:"我是一个内容"
				}
			},
			beforeMount(){
				console.log("beforeMount可以调用data():",this.content);
				console.log("beforeMount不可以访问dom节点",this.$el);
			},
			mounted(){
				console.log("mounted可以调用data():",this.content);
				console.log("mounted可以访问dom节点",this.$el);
			}
		});
		app.mount('#app');
	</script>
</body>

效果:

beforeUpdate()和updated()

beforeUpdate()

  • 在组件即将因为一个响应式状态变更而更新DOM树之前调用

视图层的数据发生改变时调用

updated()

  • 在组件因为一个响应式状态变更而更新其DOM树之后调用

DOM更新完成时调用应避免在updated中改变数据否则会造成无限循环

beforeUpdate()和updated()的区别

<body>
	<div id="app">{{count}}</div>
	<script>
		const app = Vue.createApp({
			data(){
				return {
					count:0
				}
			},
			beforeUpdate(){
				console.log('beforeUpdate:',this.count);
				this.count++;
			},
			updated(){
				console.log('updated:',this.count);
			},
			mounted(){
				this.count = 10;
			}
		});
		app.mount('#app');
	</script>
</body>

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是洋洋a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值