Appearance
什么是副作用
在 vue
的源码中,会大量的涉及到一个概念,那就是 副作用。
所以我们需要先了解一下副作用代表的是什么意思。
副作用指的是:当我们 对数据进行setter
或者 getter
操作时,所产生的一系列后果。
那么具体是什么意思呢? 我们分别来说一下:
setter
setter
所表示的是 赋值 操作,比如说,当我们执行如下代码时:
js
msg = '你好,世界'
这时 msg
就触发了一次 setter
的行为。
那么假如说,msg
是一个响应性数据,那么这样的一次数据改变,就会影响到对应的视图改变。
那么我们就可以说:msg
的setter
行为,触发了一次副作用,导致视图跟随发生了变化。
getter
getter
所表示的是 取值 操作,比如说,当我们执行如下代码时:
js
element.innerText = msg
此时对于变量 msg
而言,就触发了一次 getter
操作,那么这样的一次取值操作,同样会导致element
的innerText
发生改变。
所以我们可以说:msg
的getter
行为触发了一次副作用,导致element
的innerText
发生了变化。
副作用会有多个吗?
明确好了副作用的基本概念后,想一想:副作用可能会有多个吗?
答: 可以的。
举个简单的例子:
html
<template>
<div>
<p>姓名:{{obj.name}}</p>
<p>年龄:{{obj.age}}</p>
</div>
</template>
<script>
const obj = ref({
name:'Ned',
age:20
})
obj.value = {
name:'张三',
age:18
}
</script>
这样的一个代码中,obj.value
触发了一次setter
行为,会导致两个p
标签的内容发生改变,也就是产生了两次副作用。
总结
- 副作用指的是:对数据进行
setter
或getter
操作时,所产生的一系列后果 - 副作用可能是会有多个的