00:00
好嘞,各位,那从这小节开始呢,我们来研究一个特别重要的问题,就是view到底是如何监测数据改变的,或者说呢,叫做view监测数据改变的原理,说老师啥东西没听懂,你到底要讲什么呀,我这么写呀,大家就懂了来数据是不是都是配置在这个data里的,你比如说呢,我把一个人的名字存进去,嗯,叫Tom,好,我简单的呢,用一下我写个差值语法啊,就代表我用了。我们之前分析过这个,说如果有一天你把data里的内幕给改了,那么这块用到内的地方是不是就自动更新呀?那同学你好好想想这个前因后果。一切是不是因为你改了数据,然后呢,被view给发现了,被view给监测到了,随后是不是走了这个橙色的这条线呀。那同学,我们要研究的就是黄色箭头所指的这个位置,也就是说view他咋知道我把date里的name给改了,那他是怎么拿到我改完了的这个name的最新的值的呢?同学,你想想,如果view连监测你改变数据它都监测不到,那你说还谈什么橙色的这条线呢?你说是这意思不?各位,哎,舒老师,那我知道了,那其实用的不就是这个吗?监视属性吗?我知道你给我讲过啊,就是里边写一个配置叫做watch,哎,那你听我说啊,各位,你写watch能够监测到某一个属性的变化,这只是表象,OK,你写这关键词watch watch只是一个表象,View拿到这个watch之后,它具体得怎么写才能监视呢?那就又涉及底层原理了,你说对吧?各位,所以说呢,是这么一回事啊,默认view里边就有一个监视,View默认的这个监视能干嘛?同学,你改数据,我就给你更新用到数据的。
01:54
地方,你说这是不是view里的一个默认的这么一个监视啊,那view还给你提供了一个watch配置项,也叫监视,这个是干嘛的呀?这是交给咱程序员用的,哎,也就是说各位你可以写一个watch配置去监视data里的内幕发生改变,内幕一旦发生改变,你是打印一个lo,还是说你alert,还是说你发送一个adjust请求,人家就不管你了,对不对?你配置watch能不能监视name,能,这是谁的监视程序员写的watch去监视,那我再问你view默认能不能监视内幕?能,那view默认的监视它干嘛呢?一旦你发生了变化,那我就寻找用到你的地方去更新,你说对吧?各位,那无论是watch还是说默认的这个监视,它里边的原理都是一样的,也就是当你分析明白了啊,原来view是这么监视数据变化的呀,那也就意味着这个的原理咋的你懂了,那这个自带的这个监视的原理咋的你也懂了,明白不?
02:54
各位,哎,他俩底层用的是一套类似的逻辑,OK,好,那来吧,分析分析,那在真正分析之前呢,各位我做一个完善的这个动作啊,就是在这儿呢,我有一个地方写的不好,我不知道各位发没发现这儿不好。
03:09
为啥不好?同学你想我是不是把索引值作为K了,索引值作为K也不是不行,但是你得保证咋的不要破坏数据的顺序,那我问一下你这在干嘛,你这就是在破坏数据的顺序,你看又升序又降序,你玩的可开心了,对吧?他俩加在一起,同学咋的效率低呀,我知道你现在打开吧,各位它没啥问题,你瞧这是升血,这是降血,但是我们都知道这个里边呢,有一些节点它没有服用,是不是效率比较低啊?而且啊,同学老生常谈的一个问题,如果这里边有一个输入类型的节点,我把周杰伦后边写个周杰伦,我一生序,周杰伦走了,他不跟着走,对吧?哎,不都是因为你用了这个index,并且还破坏了顺序吗?哎,怎么解决很简单,p.ID就搞定对不对?各位好了,回来你刷新一波,你把周杰伦后边写个周杰伦,无论是升序嗯还是降序,它俩是不是都一起走,而且呢,节点复用率很高,你说对吧,好了,那这儿呢,咱就改完了好了,给它关掉,说老师来吧,是吧,开始你的。
04:10
表演吧,这不要给我分析监测数据的原理吗?那是这样的啊,各位咱得首先明白,你要是不知道U监测数据变化的原理会怎样?之前在线下讲的时候,就有同学问我说老师啊,这块难不难呀?老师这块如果我要是不学的话,也能正常写代码,那我就先不听了,我先保证那个我能正常写代码就行,就是我一改完了呢,那边就变,至于说他是怎么监测的,老师我能不能暂时先放一放,我先不管它,同学,我告诉你啊,是这样,如果说你把它放下了,说老师他爱咋监测咋监测啊,跟我一毛钱关系都没有,我也不想知道,我一改那边就变就得了,我就用就得了,同学,你要是以这种方式去处理问题,你就会发现啊,当某一天。你写了一个你认为啊很正常的修改数据的这么一个代码,然后你就发现你怎么改,你改出花来,View啊都不认可,都监测不到,你把这数据改了,那这时候就很尴尬了,那这个时候呢,你也可以去解决,对吧,你可以这个看一下人家别人怎么写的,发现啊原来不能这么写啊,得这么写。
05:11
那到底里边他怎么处理的,为什么这么写行,为什么像你那么写就不行啊,你就解释不通了,那你要是始终以这种状态去学习的话,那可能就会造成一个问题,越往后学你就越机械,而且东西你还记不住,你说对吧?好了,同学,咱不磨叽了,听我说啊,这一小节你得听他监测数据改变的原理你得懂,然后以后呢,当你遇到问题的时候,你就知道为啥你那段代码不行,说老师那我得写到哪段代码啊,说看起来很正常,能把数据改了,丸子又还监测不到,有那样的代码吗?有,接下来我就给你演示,我要是不演示,直接讲吧,就有点干巴巴的,就没意思,对吧?好了,同学,我给你演示出来这段代码啊,来,把四呢复制一份。名字呢,改一下啊五啊,不叫列表排序了,那叫啥呢?在这儿叫做更新时的一个问题啊,拿过来先看看是什么问题呀,好同学,听我说我能用两行代码演示出来这个问题,我绝对不用20行代码去演示,你觉得呢,我能用一个简单的,为什么用一个复杂的呢?完整的大家压力还挺大,所以说接下来呢,你听我说各位,这个列表我要留着,但是列表的排序和列表的这个过滤我都要删掉,也就是这块咋的不过滤了,也就是这块咋的也不排序了,那空行给它删掉,那也就意味着这边的keyword不用了,Sort type不用了。
06:32
那同学这一堆东西是不是也不用了呀,所以说连同这个comput我都给它删掉了,越简单越好,删掉说老师那这回就行了,这回不行啊,各位你看你便利的时候是不是还用那个fire persons呢?不太合适吧,这东西都没了,你得用谁呀?Persons好,右键打开瞧一下效果啊,那当然了,各位啊,这个input框啊,我也不需要回来把这input框呢给它干掉好了,回来再看,诶,这就是最开始的那个列表对不对?好,打开控制台啊,也没啥错误和警告,接下来提出我的需求就是在这儿啊,有一个按钮。
07:07
这个按钮一点就能更新马冬梅的信息,说老师,那周冬雨,周杰伦同学,别考虑他们三个,我现在不想更新他们三个,对吧,你就更新马冬梅就能把问题演示出来,为什么写了一堆代码去更新他们三个呢?对吧?没意义,我们这小节就是要把这个问题引出来,各位点按钮更新马冬梅不废话了,开始走。在这来一按钮,咋写更新马冬梅的信息是不得给他来一个点击事件呢?Click咋写?Update代表更新,但你这么写呢,容易让人误会,这看你代码的人可能还觉得,哎呀,这个东西是不是谁都能更新呢?实际上他只能更新马冬梅,所以说换个名,哎,Update梅说老师真low是吧?哎,真low,别管low不low,能懂就行,咱又不是最终拿脚手架写那个案例,你说对不?好了,来开始写,在这儿呢,就得配置一个什么呢?MYSMYS里边呢,就得写update酶同学,我问你光标闪烁的位置怎么写?
08:06
说老师太简单了,从众多的人当中拿到马冬梅一改不就得了吗?是哈,this.persons第零个是吧?马冬梅啊,你想改啥呢?同学是这样,不管你改啥,我觉得你改ID都不合适,你觉得呢?同学,这就跟人一样啊,你说一个人的这个名字对吧,这个手机号,家庭住址,甚至我问你人的性别是不是都能改,但是人的身份证号是不是不能随便改啊,哎,所以说这会儿同学不要去改这ID,说老师我就想改呢,其实也没啥问题啊,就是不太合适,好内幕改,别叫马冬梅了,那叫马啥?哎,叫马老师。哎,说老师,你说的是哪个?马老师,是我熟悉的那个吗?嗯,好像是吧,就是说年轻人不讲武德,那马老师是吧?哎,好了,Age呢,也给他写一下,马老师多大了呀,50,我可没指名道姓啊,我就说了一下啊,不讲武德呀,好,性别呢,给他改一下啊,是男士。
09:01
说老师你就一行一行这么改啊,多麻烦呀,我知道麻烦测试嘛,是吧,试试看看能不能行,回到这个页面当中啊,然后这样我打开VIVO的开发者工具。点击一下,然后打开马冬梅的信息,然后呢,你看好了321走,各位马老师50难是不是改了,而且看开发者工具也给你呈现了一个最新的数据,对不对?好回来说老师这没问题啊,马上就有问题了,接下来就有问题了,看着啊,我把这三行啊都给它注掉。然后呢,我在后边啊,给他都补一个注释,我写这么一个词叫奏效,奏效是啥意思,就是这种修改是可以的,View也认可,最后页面也更新,也不报错,也没有警告,就是一切安好,OK好了。说老师呢,还有一个简单的办法,就是一行能写完,是的,我知道this.persons拿到第零项,接下来怎么办?别一行一行来,是不是可以这样啊,把这个整个复制。啊,然后呢,001不变这块叫做马老师,哎,然后这块呢,是50岁这块也改一下,你这样改多直接,对不?各位你这就是属于修改那个对象里的属性,一个一个去修改,我这就属于啥呀,你那个第零项就原来的ID001马冬梅,整个这个对象都被我绿色这个对象是不是给替换掉了呀?哎,就这意思。
10:24
老师,那还用验证啊,那100%行啊,你看看吧,来走。打开马冬梅的信息。看着啊各位321走,我点了,我没骗你,我点了,但是我问你啊,各位从开发者工具的体现是来说,V呢没有发现你改数据啊,那view没有发现你改数据,那页面就更别提了,你说对吗?各位他发现都没发现,他怎么执行后续的动作呀。说老师啊,那现在你这这东西很尴尬,到底是改了还是没改啊,同学,那我这么跟你说你就懂了啊,从代码的层面上来说,你真的是把一个数组里的某一项啊给彻底替换掉了。
11:03
但是view并没有监测得到,说老师,那你怎么能证明这个数据它真正改了呢?你看开发者工具都说没有改,同学,我问你开发者工具是不是V写的呀,View不承认的,开发者工具肯定不体现呢,那怎么验证啊,很好验证,来各位回到代码里面啊,我把这VM呀给它收到,然后就可以验证了啊,瞧着刷新一波,然后再点打开这个。马冬梅,女,30对吗?好,321走你各位V没有发现数据改变,但是数据其实已经改了。好回到这儿,我们看一下VM点他身上是不是有那一堆人person我拿到第几个人,第零个人我拿到他的name是不是马老师,我拿到他的是不是50岁,我拿到他的性别是不是难呀各位,但是页面不变是因为view并没有监测得到,你把这个人的这些信息给改了。诶,老师这是怎么回事儿呢?是吧,要不问问马老师啊,发生什么事了是吧?哎,来同学说一下啊,这个呢,你得研究vu监测数据的原理,OK啊,那在下一小节呢,我们去进行这个VU监测数据原理的这个分析,但是在这儿呢,有一个小问题,我希望呢,大家也知道一下,因为大家自己下去练习的时候啊,可能会出现这个问题,同学我刷新一下刚才我咋说的,诶我说同学啊,你看打开开发者工具,同学啊,你看你打开这个人对吧?诶这个地零子啊打开啊说老师刚才你是这么讲的是不是,哎说我一点啊你看哎开发者工具没有变证明什么呢,我又没有承认你这次修改,诶但是大家下去呢,容易这样操作,你看着啊各位我来到控制台,我刷新一下。
12:42
或者这样,同学我新开一个页签,你说行吧,走,这是全新的一个页签对吗?好,我问一下,在这个页签上我打开过开发者工具吗?没有打开过,然后这个时候呢,你注意,诶,走我点了一下吧,那现在不用说各位肯定那个persons第零项的那个名字已经改成马老师了,是吧?哎,咱看一下vm person4,然后里边的第零项完了,那个name是不马老师,哎,然后这个时候同学你看你先点的按钮,随后你再点的view开发者工具啊,诶这块呢,就很神奇了,你打开同学它居然还变,哎呀,说老师头都大了呀,这个东西到底是怎么回事儿,同学用一句话给他说明白。
13:25
当你点击了这个按钮的时候,你的的确确把内存中persons那个数组里索引值为零的那一项,马冬梅的信息的确给改了,啊,是变了的,但是view并没有监测到本次变化,OK,至于说开发者工具,这到底体不体现,我得看你啥时候去点,你要是先点开它,你再去点按钮,它不给你呈现,要是先点按钮再点开它,它就给你呈现,你说对吗?至于说为什么我用这一行代码没有办法修改掉马冬梅的信息,得在下一小节我们去探讨它监测数据的原理,才能去分析明白。好这小节呢,听。
我来说两句