粉丝17.4万获赞114.4万


呃,这个面试题呢,来给大家说一下 will 双向数据绑定的原理,这一个呢是比较重要的,希望大家呢好好去背这个原理。 首先呢 view 呢,嗯,它是采用数据劫持结合发布订阅模式的方式哎,通过 object 点 define property 来劫持各个属性的 center 和 getter, 那么在数据变动的时,发布消息给订阅者触发相应的监听回调, 嗯,主要呢分为以下几个步骤啊,咱们都来看一下。第一步呢,就是需要 of sever 的数据对象进行地规变利,那么包括子属性对象的属性都加上 setter 和 get, 这样的话,对这个对象的某个值进行复值的时候, 就会触发 setter, 那么就能监听到数据的变化,就通过 offsover 呢,呃,进行监听数据的变化, ok, 第二步呢就是 compare 解析模板指令,将模板中的变量呢替换成数据,然后初始化渲染页面视图, 并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有改变呢,他就能够收到通知去更新视图, ok, 这里呢他主要 有两个步骤,一个呢是渲染视图,一个呢是更新视图,好吧,那么第三步呢就是 water, water 呢就是订阅者,那么订阅者呢,它是 observer 和 computer 之间通信的一个桥梁啊,主要做的事情呢就是在 自身实力化的时候,往属性订阅器 deep 里面添加自己。第二个呢就是自身呢,必须要有一个 update 的方法。第三步呢就是等属性改变的时候, deep notice 通知的时候,能够调用自身的 update 的方法, 并且去触发 computer 中绑定的毁掉,此时他的任务呢就完成了,那么 mvvm 呢?他作为数据绑定的入口,整合了 observer, computer 和 water 这三者,通过 observer 呢来监听自己 model 的数据变化, 通过 computer 呢来解析编译模板指令,最终利用 water 呢搭起 offsiver 和 computer 之间的通信桥梁,达到数据变化试图更新,试图交互变化呢数据 model 变更的双向绑定效果。这个呢就是 vivo 双向数据绑定原理的所有内容,大家如果不理解的话,可以好好的去看一看。

好了,同学们,这脚呢,跟大家介绍的是一个重要的点啊,是一步足间的使用啊,我们以前啊,在,尤其是在陆游这一块, 如果啊,我要减少这个程序的体积,我一定是要做一步路由的设定的啊。在以前我们直接使用一个 input 这样的函数啊,然后呢,在这个函数中啊,嗯,把这个 input 返回值啊,作为一个函数的返回值啊,直接返回去就可以了 啊。那么在 vivo 三中啊,略有不同,我们依然要设置一个函数啊,但是你这个函数要声明在这个叫做 define a sink component 里头,为什么要这样做呢?是不是主要是 要和咱们上一讲介绍的这个函数式组件把它区分开来啊?你不能说声明两个都是函数,那我怎么区分他是一个异步组件还是一个函数式组件,所以就有了这个 define acing 肯跑奶的这个函数。 所以同学们记住这一点啊,明确的使用这个东西,把我们一步函数包起来啊,就可以了,只有这一个不同点啊。另外的话,如果是一个带选项的复杂的一步组建啊,大家以前那个选项的名称啊,由 component 改为 lower 啊啊,就好比说 我们在这里头设置一个像这样的一部组件是吧,我们定义它的时候呢,我们以前设置的是 come 内测啊,我们现在呢,它变成 lolder, 当然这个本身是不是跟以前我们写法是一样的,下面我给大家写一个简单的哈,我们去试一下,那比如说还在我们这个例子啊里头,我想做一个函数 啊,叫一部组件啊,好,同学们在使用这个一部组件的时候稍微那么注意一点点啊,比如说我们这个一部组件,咱们可以啊,给他起个名字就叫 a sink, 靠谱好吧, 啊,就叫这个,然后呢,同学们在声明的时候啊,在这里 a sink combo, 比如说以前呢,我是怎么声明呢?写上一个函数, 这个函数呢,大家使用 amport 一步的去加载他,然后呢指定一下你要加载的那个组建的具体名称,比如说我要去下一页了,是不是?然后可以在这指定一下,我要去 nice 配几点六,现在这里需要一个 nice 配置是不是?好的, 在这写一个 next 配几点 view, 我们随便写点东西啊,这叫 next 配置啊, 好,那这个准备好之后啊,我们自然而然以前是这样去做,但是我说了啊,这个东西你没有办法和函数式组件区分开来,怎么办呢?用一下刚才讲到的啊, define acing cup pro, 把我们啊刚才写的这个函数啊放到他里头去啊,我这样呢,就可以定义一个异步的组建啊,然后用异步的方式啊去 加载的,这样的话不会在主播里头去存在啊,非常简单,对吧。嗯,下面的话 我们来验证一下啊,刚才这个 a sing 个 comp 啊,我们能不能在页面中正常的去看到他啊,这是报了一个错误啊,他说啊,我们在加载这个八九的时候啊,有问题啊, nice 配置啊,我们检查一下啊 啊,这里在解析这个赛死的时候没有配置啊,所以把它先删掉,因为我们今天也没有样式,可以把它直接干掉 回到这边啊,刷新一下,好,同学们注意啊,这个页面是不是已经出来了?好,这就是啊,我们在六三中啊,去做这个一步组建的时候,跟以前就这么一点点不同啊。 啊,那么第二点不同是我们在使用带选项的时候,比如说大家有时候是不是会加载一些错误的这个提示信息,或者是 lo 定信息啊?我们会设置这两个组建, 那么包括一些底类或者台马奥特这样的这个选项啊,那么这个时候呢,这里头那个 ctrl 的选项更改为 loder 啊,仅此一点变化啊,注意一下。