00:00
好嘞,各位,从这一小节开始呢,咱们来学习一个view里面特别特别重要的技术,他的名字呢,叫做view X,有的人呢也读view叉,哎,你怎么读都行。回到课件里面,我们已经来到了第五章的学习,首先呢,我们去理解一下这个VOX,它到底是个什么东西呢?读一下这个概念啊各位,它是专门在view中实现集中式状态管理的一个view插件,先不要往后读,就这句话信息量就挺大的。首先呢,我们发现了这个词儿叫做集中式,什么叫集中式呢?跟大家说一个生活中的例子吧,你就比如说有20个同学都想学习,那我就把他们召集在一个教室里面,然后我站在讲台上去讲,我只讲一次,但是听课的呢,有20多个同学啊,同时也有20多个思维,20多种理解,对不?各位,但是我只讲了一次,诶,这就是集中式,哎,其实跟集中式吧,有一个。
01:00
对立的概念,同学叫做分布式,分布式什么意思呢?就比如说啊,我有孙悟空那个本领对吧?哎,我揪揪下来一点头发,然后一吹呢,就变成了20个我,然后这20个我呀,分别去20个同学家里给这些同学上课,同学,那你说我讲了几遍,其实我讲了20遍对不对?哎,在这儿呢,我们这个view X呢,是一个集中式的,哎,可不是那个分布式,行吧,各位,哎,来再往后看这词儿,同学状态啊舒老师,状态是什么呢?状态其实就是数据,它俩是一个意思,就比如说各位我们做过这个案例,Todo list,那你说todo list里面是不是保存着一堆要做的事儿,我们给它起的名字是不是叫做todos,这一堆要做的事儿就是啥数据也可以换一个说法,叫啥叫状态啊,甚至还有一种说法叫做状态数据连起来念也行,哎,或者说那个giha搜索那个安利同学,你搜索回来的那一堆用户user斯同学,我问你是啥。
02:00
是不是也是数据啊,也可以称之为什么,哎,状态好,再往后看是一个V的插尖,其实同学你就读到这儿啊,不用看官网,也不用听我讲,你就知道接下来这个view X得怎么去使用它肯定得是view点什么use,然后去使用这个view X,你说对吧,各位,哎,插件吗?好,我们再往后读啊,它是一个插件,那能干嘛呢?对view应用中多个组件共享的状态,哎状态也叫数据,是不是进行集中式的管理,那所谓的管理就是读出来或者是修改它读和写嘛,啊然后再往后读,也是一种组件间通信的方式,而且呢,它适用于任意组件间通信,好,那我们就把这个VX定义呢,就说完了,哎,那可能有些同学说啊,老师啊,你这句话读完了是吧,这说的也挺细,但是我听完你这说法之后,我好像还是不知道这个viewvo X。
03:00
到底是个什么东西呢?哎,我就考虑到你可能会有这种感觉,所以说呀,各位诶这个PPT呢,给大家准备好了,来打开各位啊,给大家放两个动画啊来走,你说目前啊,我们的这个应用啊,是这个样子,有一个APP,然后里边呢有一个A,有一个BB,里边有一个C,下边呢有一个D,然后接下来呢,有这么一个场景啊各位就是A组件里边啊有俩数据。X1Y2,哎,就这俩数据,然后呢,B组件说呀,你那X挺好的,我想用,那这就涉及到AB组件给B组件传递数据,你说对吧,各位,那你说AB什么关系啊,是不是兄弟啊,那我们之前学过兄弟组件间同学通信最好用啥呀?消息订阅与发布也行,但是我们说在view里面有一个更好的方式,是不是全局事件总线,所以说你得在B组间里面,就是这个位置,怎么着?哎,找到全局事件总线,给它绑定一个事件,事件名我叫get X,因为我想语义化一点,得到那个X吗?然后在这儿呢,配置一个回调,回调里面干啥我就不说了,你比我都清楚,同学是不是回调能收到这个X,然后存在B组件的自身,是不是这些就不写了,不体现这些细节,那A怎么能把数据递过去呢?很自然,各位A里面是不是找到那个Dollar bus,那个傀儡,然后呢,1MIT提交一个get X再把这个数据。
04:28
带过去他是不是就收到了?哎,好,那同学你说啊,如果有一天这个C组件和D组件也觉得你那X挺好,他们也都想用,那怎么办呀,那你就只能这么做了,C组件里面走,再来一个这个get X,然后A组件里面怎么办呢?哎,再给他1IT啊,C这就也收到了,那D组件这是不是也得绑定一个,那同理你这边1MATE这块儿是不是也收到了?好各位啊,那目前就是这么一个场景,A组件里面有一个数据,完了大家都想用,对不对?哎,读出来展示到页面上,那我这只考虑了一个方向,就是读数据,但是大家都知道对数据的操作是有两条线的,一条线是读,一条线是写,所谓的写也是改,我这个图里面所有红色的箭头考虑的都是BCB,读出来这个数据X用你说对吧,那如果有一天BC。
05:28
D这三个组件都想修改A组件里的X这个数据,那你说得怎么办呀?那你得考虑好了,这回就是谁接收数据,谁提供数据啊,A是不是想修改X,那这X从何而来呢?比如说X刚开始是一,你想修改,那你修改的值是多少呢?谁给我呀?是不是得是BCD这三个组件其中的某一个给我呀?所以说同学A组件是不是想收数据,想接收数据的地方怎么着来着?Dollar for bus是不是得绑定一个事件,这回我叫update X,那这回回调是不得在这儿了,你导导on的时候不得指定事件的名和回调嘛,对吧?各位你it的时候是事件名跟上数据对不对?好,各位,A组件已经绑定完这个update X了,那你说接下来呢?
06:18
B组件想改A里的这个X怎么办呀?那B组件就得在这个位置,是不是写Dollar for bus1mit update X,把最新的X给它提供过来,这边收到对吗?那同理各位你说C这儿是不是也得这么做?那D这是不是也得这么做?那同学好,至此我才真正的实现了这个X,此能让所有的人读出来用,也能让所有的人去修改,那同学你觉不觉得这个X就有点像共享单车的意思啊,你扫码你能骑,我扫码我也能骑,是不是,是不是这意思各位啊,所以说你看我这个标题叫做多组件共享数据,同学共享的那个数据是谁呀?X,我用什么实现呢?全局事件总线实现,同学你这种实现方式啊,就稍微有点乱,但是同学啊,我不想说为了讲这个VX,然后我就疯狂的去踩这个视线总线同学,什么东西。
07:19
都是有弊有利的,你说对吧,你比如说同学全局事件总线,咱们之前利用它进行兄弟组建间的一个正常通信,是不是觉得挺香的,你就比如说同学A想把东西给B,我问一下走这条线是不是就挺好的,这个箭头啊,但是现在吧,你用这个全局事件总线啊,就有点儿稍微不太好了,你说为什么呢?因为同学你觉不觉得你的组件太多了。而且最主要的是你想共享啊,你想让这X上所有的组件都能读,都能写,那你付出的代价可挺大的,对不对?你看很多组件里面都得不断的Dollar for Dollar for,同学我这只是四个组件,哎,咱就说一个庞大的项目里面有34个组件,你说怎么办?有abcd,那么那么那么多,然后这X呢,剩下那33个组件他都想用,那你说你怎么办?那你这就有点麻烦了,你说对吧,各位,哎,就不是说全局事件总线不好,是如果涉及到很多组件共享那咋的,那就有点麻烦了啊,其实同学就我写这四个组件吧,是通过图的体现,让你看到了一堆乱七八糟的箭头,然后你就觉得,哎呀,老师好像有点乱了,其实你要写一写吧,也还凑合,诶,咱中规中矩的说也还凑合,但是同学要是有14个我跟你讲这事儿真就不好玩了啊,那view X呢,就是专门解决共享数据的这个问题的啊,那他是怎么工作的呢,同学。
08:46
不说API,不写案例,就是给大家画图说明问题来走着,如果X出现了,同学,那就是这么一个场景,瞧着啊,还是AAPP,还是abcd这四个组件,但是你瞧着VX出现了,同学,你注意VX不属于任何一个组件,你看我没有把这VX写在abcd里边的任何一个里面,甚至我都没有写在APP里,对吧?各位VX不属于任何一个组件,哎,说老师,那它里边怎么有1X1呢?哎,听我说X,你不是想共享吗?你不是想让所有的组件都能读到这个X吗?不想让所有的组件都能去修改这X吗?好,那这X呀,不放在任何一个组件里面,那放在哪儿?诶,就放在view X里面,就放在这儿,诶你就理解为这是一个共享单车停放的一片区域,诶,这里边的东西谁都能用啊,然后说老师接下来呢,接下来你听我说啊,刚才咱们。
09:46
那个A组件里面是不是还有一个Y呢?哎,同学你看这我把Y呀给你体现出来了,走。诶在这儿啊,走Y出来了,Y2啥意思?我想体现的是不是说你用了view X啊,然后所有的组件都不能存数据了,不是各位所有的组件该存数据存数据,但是如果你自己心知肚明,还说我存这数据啊,好像很多组件都要用,那就不要放在你自己家了,也就是说X别放在A那了,你自己心里明白吗?那XBCD都要用,那把X放在view叉这,诶,或者说view X这说老师那接下来呢,接下来就简单了呀,你A组件是不是想拿过来这个X读出来用呢?啊走箭头读出来就用,那时候老师我还想改呢,同学,人家也给了你一个API,一调就能改,哎,所以说你看我写的是一个双向的箭头啊,是靠两个API实现的,你调一个什么什么东西就得到这X了,然后你再在这个A组件里面调一个什么什么东西,就把这X给改了,哎,同学。
10:53
那你说B组件C组件D组件是不是都可以这么玩啊啊,那你想想各位A组件啊,把这X给它改了,改成二了,那你说BCD这块看到的X是不是都变成二了呀?哎,那你说B组件如果把这二改成了20,那ACD看到的是不是也是20啊同学看看什么感觉共享哎,因为比如说同学我骑一个共享单车,但我骑的时候啊,不小心啊,我把这轮胎给扎了啊,或者把车给弄坏了,那我问一下,等你再骑的时候,这个车是不是也是坏的,哎,共享嘛,对吧,各位,哎,这回是不是能理解的稍微好一点啊来回到课件里面,再往下看各位这个GI哈B地址呢,大家可以自己去看一下啊,在这呢就不演示了,来同学什么时候去使用这个VIVO X,官网上是这么说的啊同学这两句话不是咱自己说的,是完全把官网上那两句话粘过来的,人家官网上说了,说第一个情况,那你得用这个BX,就是这个时候。
11:53
多个组件依赖于同一个状态,哎,回到我这PPT里面,你感受一下,多个组件abcd依赖于同一个状态去渲染数据,谁呢?X,那你说是不是考虑一下用vvo X呀?啊还有第二个场景就是来自不同的组件的行为需要变更同一状态,哎呀同学这句话说的吧,就有点儿太官方了啊说老师什么叫来自不同组件的行为要变更同一状态呢?我跟你说一下各位,比如说呀,A组件里边有一按钮啊,你只要1.x就比原来大一,然后呢,我连点了三次啊,比如说X最开始是一,我点一次,二再点一次,三再点一次,是不是四啊好了,我在A组件里面连点了一个按钮三次,就把这X变成四了,完了B组件里呢,使我鼠标划过一个图片,哎,就会让这X呢,比原来大十倍,那是不是就变成了40同学,你看来自于不同组件的行为,这是点。
12:53
及这些鼠标划过,那这些行为都要怎么着?回到这儿是不是?诶,回到这儿要改变同一个状态,改变的是谁?那不就这X吗?啊,还有就是同学啊,你觉不觉得就这两句话呀,其实不用说的这么麻烦,用一个词儿就把这两句话全都给概括了,这词就是嗯,共享是吧?各位啊,什么多组件依赖于同一状态,什么不同组件的行为改变同一状态,同学不都落在这词儿上了吗?同一个怎么怎么地,那最终就是共享呗,只保存一份,OK,各位,哎,这小节我们没有去说API,也没有写案例,就是通过图的形式跟大家说一下VX存在的意义以及它的使用场景。好,那这一小节呢,我们听。
我来说两句