2.vue组件data为什么必须是一个函数,而vue的根实例则没有限制

源码中找答案:src/core/instance/state.js-initData()

多实例的情况下,为了保证大家的状态的不污染、不干扰 需要是一个函数

函数每次执行都会返回新的data对象实例
测试代码:

<html>
	<head>
	<title>Vue事件处理</title>
	</head>
	<body>
		<div id="demo">
			<h1>vue组件data为什么必须是个函数? </h1>
			<comp></ comp>
			<comp></ comp>
		</div>
		<script src="../ ../dist/vue.js"></script>
		<script>
			Vue.component('comp'{
			template:'<div @click=" counter++">{{counter}}</div>',
			data: {counter: 1}
			})
			//创建实例
			const app = new Vue({
			el:' #demo '});
		</script>
	<body/>
<html/>

结论:

组件需要是函数,根实例不需要(在这个应用范围内只有一个,不用担心)

Vue组件可能存在多个实例,如果使用对象的形式定义data。则会导致他们共用一个对象,那么状态变更将会影响所有组件,这不合理;采用函数的形式定义,在init根实例创建过程中则不存在该限制,也是因为根实例只有一个,不需要担心这种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值