响应式数据与副作用函数
副作用函数
副作用函数指的是会产生副作用的函数,如下面代码所示:
1 | function effect() { |
当effect
函数执行的时候,它会设置 body 的文本内容,但是除了effect
函数之外的任何函数都可以读取或者设置 body 的文本内容。也就是说,effect
函数的执行会直接或者间接影响其他函数的执行,这个时候我们就说effect
函数产生了副作用。
副作用很容易产生,例如一个函数修改了全局变量。这其实也是一个副作用,如下面代码所示:
1 | let val = 1 |
响应式数据
理解了什么是副作用函数,再来看看什么是响应式数据。 假设在一个副作用函数中读取了某个对象的属性:
1 | const obj = { text: 'hello guozhaoxi' } |
副作用函数effect
会设置body
元素的innerText
属性,它的值为obj.text
,当obj.text
发生变化的时候,我们希望副作用函数effect
会重新执行:
1 | obj.text = 'hello world' // 修改obj.text的值,同时希望effect函数能够重新执行 |
上面这句代码修改了字段 obj.text 的值,我们希望当值发生变化以后,副作用函数自动重新执行,如果能实现这个目标,那么对象obj
就是响应式数据。