vue响应式原理探究?

vue响应式原理探究?
test.vue

<template>
    <div>
        <!-- <li v-for="item in 10">{{i = i+1}}</li> -->
        <li>test{{i = i+1}}</li>
        <li>test{{i = i+1}}</li>
    </div>
</template>
<script>
    export default {
        data(){
            return {
                a:5,
                b:[1,2,3,4,5,6,7],
                i:0
            }
        },
        methods:{

        },
        watch:{
            i(now,next){
                console.log(now,next)
            }
        },
        mounted(){

        }
    }
</script>

<style scoped lang="scss">
    
</style>

浏览器中结果是这样子的!

clipboard.png
求解:为什么是test203 test204 而不是test1 test2?中间改变了那么多次是什么时候改变的?

阅读 2.8k
3 个回答

你在{{}}里放了表达式 每次页面渲染的时候都会执行一遍啊
就相当于你在一个Interval里写了i++

  • 不懂你为什么要是 {{ i = i+1 }}
  • 渲染第 2 个 li 的时候,i = i + 1, 你改变 i 的属性值,由于响应式,这时候会回头渲染第一个 li , 然后又是一个 i = i + 1, 由于值又变化了,这时候会再渲染第二个 li, 周而复始,死循环了。
  • 为什么会停在 203 和 204 ,这得看源码了,在 vue.js 里面,行数图片上有,版本号 2.4.2

图片描述

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题