00:00
来吧,我们来看一下,看第一个消息列表啊。呃,这个地方我们要需要也去把那个最后的这个最终的给他运行起来看一下是吧,先把那个服务器来运行一下。这是一个。还有一个是我们的客户端的好。啊,最终我们现在要去做的呢,是把消息列表去显示出来。嗯,这里面静态组件呢,我也提前给大家写好了,我们先把这个静态组件呢,直接给它copy比过去啊看下C。
01:04
我们现在要去写的那个文件呢,叫message,点击。把其他的干了啊行。来啊,呃,这个里面呢,我们,嗯,就稍微的这个。改一下,因为我想留下这个。是不是肯定会用它呀,那用它的话来我们这里面稍微的去改一改,把这个去掉,这个不要。好,我们现在就去来去开,这个需要改一改吧,呃,我们叫images,下面的叫头像。转一吧,来一个就行啊呃,这个里面就稍微的改一下别的头像啊,头像二啊头像二是吧,是一个images对吧,没什么太大问题啊好来我们现在来去看一下我们的这个界面效果是一个什么样的效果啊。
02:14
哎,报错了,那报错说什么呢?说这个啊重了是吧,啊重复了。那就是有两个呗。嗯。好,现在我去点什么,是不是点这个点消息这啥意思啊。是不是要因为上面是否起来的嘛,对吧,那下面是不是得加点什么market啊,前面咱做就是,那也就在这个list下面加一个什么style,等于一个对象是吧?来接着是marin啊。泡,为什么前面写过?其实是不是也要写啊?
03:05
咱妈包上面也写上啊。然后了吧,好,这里面显示了什么啊。这是显示的是啊,我。与某些人聊天的一个分组的列表。这是我与A聊天的,以这个呃一这个以NR是吧,啊这个不是这个是啊,就是他的名字嘛。啊,他的名字啊,这是我随便写的文字。能看到吧,随便写的文,这是他的头像,这个是我最后的那个什么聊天的那个消息的文本。知道吧,啊,这个显示是啊,我未读,他给我发了两消息,我还没看。对吧,我们这个功能先不做,我们先把这个列表显示出来。
04:01
啊,这个列表显示出来还有点小麻烦的啊好,那下面我们就开始去显示这个列表,那我们肯定要是读数据啊,对不?我们这里面有两个数据要读,首先是我当前的用户的信息。这个能不懂,这个很简单,是state电池嘛,User关有这个肯定不够,还有一个对吧,恰里面包含两个,一个user,一个ma,意思都需要,因为到时候要显示用户名嘛。跟着我好,那我这里面写个什么state。好吧,好,那我就去把这啊里面的信息给它取一下啊。在我渲染之前,约看之前,先取一些数据出来再说,首先我可以去取一下user是吧,This时间是吧,Pro就可以了吧,还有我要取出user,昨天咱取过和什么messages这个名字,千万不要写错了this.pro点。
05:16
那我们是去显示它的列表吗?不是啊,这个地方需要去找啊,对他们进行分组,分组以后再找出最后一条,每个组的最后一条。能听懂吗?就对它,对它进行分组,大家知道分组就有一个分组的条件,按什么来分组。按什么来分组,就这里面啊很多message对吧,我这个分组是怎么分的,也就是说这就是一个组。这是一个组,这也是个组,看什么看用户对吧,我们每一个都是个message,是不是每一个都是个message,每一个都都是很多个,应该说这里面显示的是最后一个message。
06:13
那怎么分呢,是吧,我是雷,是一组,这里假设一组二组。医嘱的,他们有什么共性?一组的message有什么共性,二组的message又有什么共性?看个属性差ID。对吧,ID能看ID吗。不能每一个都不一样,对不?能不能理解,也就是说我这个是,你看这是我跟某一个人聊天,这也是我跟某个人聊天对不对。真的不,我跟他的聊天怎么标识来着?不有一个恰恰ID吗?准确的说叫恰下划线ID对吧。看from行吗?不能也不能看六对吧,这个很关键。
07:03
啊,你分组就有一个分组的标准,是按什么来分组对不对啊。啊,怎么分组啊,叫下划线ID进行分组。明白吧,而且啊,我分组只是取出最后一条。这能不能啊,OK,取出最后一条,取最后一条组成一个数组,取出数组还要排序对吧,其实还是挺多事情要做的。那也就是说我要对这个数据啊进行处理,最终是不是产生一个我想要的数组,好,也就是说什么意思呢?我最终想去得到一个叫last messages。的一个数组。但是这个是吧,不是一条两条鱼能搞定对吧,所以我可以干嘛呢,去封装一个处理的函数。
08:07
很懂吗?我可能就叫get last messages可以吧,那我要传给他什么参数了?这个应该要知道,至少肯定有它必然的。对不不对他进行分组吗?目标就他吗?数据源是不是就他。那这个方法我们是可以定义一下这个啊,如果你这么写,嗯,可以,你应该把它定义在外面。懂不懂,那如果你这么写。你就可以把它定义在什么里面,这个都行,这没什么太大问题,能懂吧,好,那我就定义在这吧,嗯,写在外面啊。叫get last messages对吧,好。
09:02
来啊,我们要做的事情啊,我们要做的事情啊,就是对这个进行分组啊。分组RB保存。得到啊,每个啊每个组得到什么?Last message组成的数组。你懂吗?好。这个时候啊,难度的地方就来了,其实这个函数啊,是一个功能性的函数,业务功能函数,这个是有一定的逻辑性的,就你要有设计,你要没设计你肯定做不出来。啊,但这个设计呢,估计大家现在有点有点悬,所以呢,我就直接告诉他我的一个想法。啊,我基本上呢,分为这么。三步,第一步啊,第一步。
10:05
啊,我啊会找出。啊,找出来啊,哎,找出每个啊聊天,每一个聊天啊,一个聊天就是一个组,能懂吧,每个聊天啊的last message b用。一个对象容器来保存啊,也就是我找到每一个组的拉me用一个对象来保存A这个地方有没有意思,我用对象的乘啊,对象的存就有一个问题,属性名是什么对吧?而值是什么?也就对象的乘,不就这样一个结构吗?属性名是什么呢?是chart_ID。这很关键,因为我是按这个分组,那必然要用它,不用它我没法搞。
11:04
能懂吧,我是找到每个组的拉message这个懂不懂?每个组每个组组的标识不就是恰恰相关ID吗?好,接着值是什么?就是那个last message,实际上本身上就是message,我之所以叫last message,就说存的是last message。对吧,那时message是不是个message,是只是它是最晚的一个message,对不对,记住啊,是当前那个组最晚的。好,没问题。接着呢,我要取的,最终要取的是不是他呀。我要得到啊,所有last message得什么呢?数组。开始我是放在一个对象里面的,就啊。生成一个数组,有人说,老师,你为什么不直接用个数组拉倒呗,这个有讲究啊,用用对象,操作起来方便。
12:02
好,第三步对数组进行什么排序对吧?排序就有一个事情,按什么进行什么方式的排序对吧?就是根据什么来排序,是升序还是降序,对不按什么来排序。降级降级你得知道按哪个指标来排序啊,是它的ID不可能吧,对不对,按什么create_time。怎么去降去吧,这能弄吧啊加去。好了,这就是主要的三步。没问题吧,没问题啊好,那我们就去一步一步的去实现呗,对不对,先来看第一步。嗯,接着后面把这个也复制一下吧,把这个二三部也复制一下放了对吧,来把它呢给它。
13:06
呃,回退一下啊,好来啊,我们来一步一看这个一步最终我是不是要产生一个对象容器,那我先就上来就应该什么。是不是准备一个容器,看着命名很关键,我这一个呢,是包含所有last message的一个容器。啊,而且是对象容器对不对,不是个数组。能懂吧,那我这个地方大家看完啊,我这么命名的啊,我叫这个名字好吗。不好,因为这名字啊,因为到时候下面这个数组叫这个名字比较好,下面我不要产生一个数组吗。对不,这个时候叫这个名字就不太好了啊,来最后我来去我叫一个名字。能不能看到啊,是last message OB s。
14:02
啊,我故意加了S啊,因为不加S就感觉好像是个最后的一个对象的感觉啊,后来就加了S,好准备一个空容器,没问题吧,没问题,下面就是要去干嘛去。你得一个个变异吧,你不变利怎么知道怎么判断,怎么存呢,对不对,这个能不能懂。点for一起呗,是吧,拿到一个message呗,好里面做一番处理是吧,那也就是说啊,有几个事啊。我得去判断。啊,我这个message是不是我所在的那个组的什么,最后一个我这个组的message可能在这里面有,有可能在是么?还没有。是不是两种情况?没啊,就是我现在是有可能将它放进去的吧。
15:03
那是一定放出去吗?不一定。不一定,这个得说啊,这有两种情况啊,对于我当前这个麦两种情况,第一种情况是当前这个容器里面还没有。一三的肯定还没有对不对。还有一种情况是什么?已经有了,这个组已经有了。这个能懂不?那我有没有呢?大家看着我啊,我这么做的啊,我这么做我先写啊,写的这些竖式看着我。我先去尝试去取一下啊,获取啊last message怎么获取呢?大家看到啊。底中框,我需要去查询的取得条件是什么?恰ID对吧,恰ID来怎么加点恰下划线ID,这是不是我当前这个组的标识ID。
16:04
No,不懂得到message的标识ID啊,得到message的,呃,聊天ID好。来,下面我干嘛呀。哎,我这是干嘛去。我尝试去找。是吧,我已经保存的那个,我当前所在那个组,它的那个last可能有吧。啊,得到获取吧,叫获取啊,已保存的当前主的last message,但是一取就两种情况。什么情况有或者什么没有,可以说上来可能没有,对不对,再一个情况就是什么有。
17:02
那怎么代表没有了衣服?Last message。谁发没?是不是概念,那下一种情况else就什么二不就有了呗。对吧,好没有我应该干什么,那应该保存起来呀。是不是这意思,那也就没有就说明什么,当前当前message就是所在主的。那对不对,因为一个都没有,那我一上来不就是最后一个吗。清不清楚,那我应该干嘛去,很简单呢,这个事情就是那OB减S。存呢,怎么存?
18:00
因为指定个名字啊,名字指定多少。中括号ID等于。你存在这个容器里面,就证明你是当前主的那面散失式对吧,所以最后是不是不好说。你得医务病历,病历完了以后才知道你到底是还是不是。对不好,下面的情况哪一点有。也就是说当前组出现两个message是吧,一个是我当前的,一个是这个拉,他们俩是同一个组的吧,嗯。对吧,同一个组的我得干嘛去呢?我也就是我要不要去存这个message。的一个条件,对不?什么条件呢?如果比什么last message one。
19:00
就干嘛,就将message保存为last message这个不懂,那比较啊,那就有个什么if判断,满足什么条件我再做。对吧,满足什么条件呢?那么一个写my message。下划线,Time。晚,晚什么意思,大于吧,因为时间越往后越大嘛。是吧,那点create下划线。Time。对吧,那下面我咋保存呢?比如说保存last message,那就是last message等于message行吗?你说老师这个不行,这个是来行吗。
20:02
对不对,你不是说保持拉一吗。那我不。对吗?很关键啊,这个很关键,这个是大家对语法的理解的问题啊,就是对对象啊,引用相关的问题,我要保持拉是个什么概念,并不是说我要赋值赋值给last,而是在保存到这个容器里面去才能说明它是last,也就是说我现在赋值给last ma,我有关联到这个对象容器里面去吗?有没有没有吧。对不对,并没有,这是我用一个变量来引用的,怎么用。那我得干嘛呢?Last OB s中括号。TID。
21:02
能看了吧。那也就是说这么一通操作下来啊,一通操作下来,这个时候我的这个里面,我的这个容器里面是不是又存了很多组的last message。嗯,老师这个好费劲啊,这个东西说实话不算是特别难的,其实做多了就就那么回事。单行,你对于当前大家的情况来说,需要多想一想啊,这是我的第一步操作。那这个结果啊,第一步其实我们就相当于做完了啊,就已经做完了,那做完了之后呢,那下一个。好吗?得到所有last message数组,现在是不是包含所有last message一个对象啊?我要得到里面。对象里面所有value是不是组成的一个数组?能不能听懂,我这是一个对象容器,里面包含很多个,这是冒号,不是逗号是吧,是个冒号。
22:05
能看到吧,这里面不所有的value都是拉吗?我要把它转成数组,这个怎么转呢?这object就方法。你们看到接着放什么。把它这个啊,这个对象,这个object函数对象有一个方法叫value。Value是返回的数组啊,这个里面指定是哪个对象,哪个对象呢?我不有一个last message OBS吗?这个对象里面是不是很多属性,每个属性是不是属性值。把所有的属性值都捞出来。生成一个数组,那你说我取个什么名字?那是什么message,诶,这个时候名字就特别好了,对吧。
23:02
能不能看到。这样是不是得到所有last me组成的数组了,下一步?干嘛?排序啊。排呗,啊排序要用到数组的什么方法。Short的方法,那就这样行吗?肯定不行,默认排序不对。他哪知道要用那个create time来降去啊。那那他要知道他是神呐。啊,这个地方short的时候可以传一个什么呢?叫比较函数对吧,比较函数呢,接收的是前一个message和后一个message懂不懂,那也就说我这里面写个M1,再写个什么呢M2。就本来他们它是其实是啊,就是这里。它有一种类似于冒泡排序,什么意思呢?假设这个是M1啊,这个是M2。他们俩进行比较。
24:01
如果我们要加去假设他发现M1小于M2,它是干嘛了?换一个顺序。认懂吧,如果假设啊,我要降去M1,现在是,呃,现在是小于M2的,那是不是要换成。这样真的不啊,继续的去比较啊,那现在他怎么知道啊,到底进行一个什么样的排序呢?这个地方是通过返回值来确定的。好,我说一下它的判断的依据啊,如果结果啊,看它小于零。对吧,如果结果是负数。啊,如果结果是负数,那那就会啊。将一放在前面。这很关键,在M1放在前面,那另外的几个就很简单了,那如果结果为零呢?
25:06
顺序变吗?不变,这能懂吧?那如果结果呃大于零呢?谁在前面?MR在前面呗,能懂吧。好,就这样,其实看他就行,看这个就够了,只要知道这个就够。你说老师这个我哪记得住,其实记不记得住没关系啊,其实你不知道,这个很简单,我告诉你啊,我按我通俗以前的自己的搞法啊,主要是为了跟大家讲,所以我记了一下,我一上来就会这么做,减去M2。点可以跳向线看,这一个我告诉你可能是对的,也可能是错的,假设对的那就对了是吧,假设错了怎么办。
26:00
错的无非就反了,对吧,我再用二减去M1。所以这个事难不倒我啊,不过为了跟大家讲,我还是把这个啊记稍微的记了一下啊,稍微记是因为前面记了一下,如果过段时间我估计又忘了,因为这东西太容易忘了,他就是你有可能记对了,有可能记记差了,因为他就两种情况。我告诉你这两种情况是最难记的,自己再稍微调一下来看一下啊。啊,如果来看,就现在写法看对不对啊。假设现在小于零。假设线小于零,说明M1小于M。是吧?M1在前面对吗?你想嘛,小于零不是M1小,就是说白了还比较早对不对,大家看对不对啊,M1就说M1比较小,就是早比较早,M1小于M2不是负数吗?那就是M1在前面,M2在后面。
27:02
对还是不对,M1在前面,那不小的在前面吗?那不对呀,那我不大了,最前面吗。知道前面就是数组的左边嘛。对不对,懂不懂,因为我们是不是希望前面是大的数,后面小的数。对吧,所以我这个写法应该什么反了。那么看到啊,其他的就不用管了啊,写这个就够了,好,最后别忘了一些事情,你不得把他返回去啊。这个排序啊,是对数组那个就进行排序啊,你不用用用那个什么变量来来去接收返回值啊。这个能不能懂,你不用说,我随便搞搞变量,最后来接收,接收以后返回是这样的吗?不是。它已经改变了宿主内部的结构。
28:03
没问题吧?啊,这个过程大家学习以后还要写一写啊。好来,那做好它以后,下面的工作就比较简单了啊,下面的工作就比较简单了。我现在下一步要做的事情就是要把它给他什么显示出来,这个是没有太大难度的啊,来看一下,在这边来个大框是吧,写遍历去呗,是不是要用map呀。点是吧,卖了可以吧,啊明白吧,好了,接着呢,来一个来一个那个message箭头。来一个他。呃,我这个地方是不是直接可以写个小括号啊,因为都是一种情况是吧,写个小括号,写个标签拉倒。
29:00
写个小括号,写一个写个标签,这样行不?估计看看啊,这里面是不是还有会不会有有些什坏的,先先搞个简单的再说啊,就按这么搞来放到这里来看到吧,好,那下面啊,下面有工作要做,我们来看一看,有什么事情要做啊啊我这一个这一个呢,是去显示那个数量的,现在我们还暂时不做啊,我们可以把它指定为几了,指定为零可以吧,零不会显示的,到时候再指定值啊再一个。是不是头像啊,头像变化的是哪一个呢。是根据谁来去指定这里面不变化的它吗?真的不写个它写个这个记着了。Message的hand,但是你要知道啊,有可能他还什么没有头像,如果没有,那必然报错了,懂不懂,因为没有他是安的,你这搞个安的,他加载图片,那哪加得到啊。
30:05
是吧,所以要干嘛判断一下什么意思。如果他有值用这个,否则呢,对那那就不会显示。这个这个是什么内容吧,Message content,下一是什么?买的有。哎,我没有吗?我还真没有麻烦是吧,那这个咋办啦,这还是个麻烦是啊。我我只有什么,我告诉你我要想找,我想找到用户嘛,我这里面有from和to。
31:00
是不有from有to,关键是啊,大家看到啊,我这里面不有一个user吗?对不?User里面大家看到我如果直接在那写啊,User中括号啊,是不是要指定一个什么。UID最终才可以去点那个什么呢?U关键这个ID指定多少呢。是不,我告诉你,有可能是from,也可能是什么,因为我也不知道这个消息谁发的。对吧。能不懂,那到底是了。看什么对吧,得看我当前用户和这个,比如说跟这个比吧。假设等于啊,我不有优者吗?对吧?User者是不是下方ID,如果他们俩相等,如果他们俩相等,那你说我应该取谁去吗?那否则呢,否则不就就两种情况,肯定要取其中某一个啊。
32:20
这个就写的有点复杂了是吧啊。啊。能看到吧,啊,当然如果你想嗯,把这个里面稍微写的简单一点,那你就不能用小括号,你得用大括号里面再写一些GS代码,这里面没法写了,只能套在这里面写了,还有个这个里面需要一个K对吧,Message点什么下划选ID。那么看到啊好,那这个就没有必要要了呗。那你说现在我写出来了呗。
33:02
对不对,这不变利了吗?那现在就是去检验我的这个,我的这个计算好不好用,是不是来打开看一下,先看包包做。啊,我现在好像他说我就一个是吧,没关系,我可以再给别人发啊,对吧,我发消息的功能不已经有了吗?我再给他发一发ABC轴理好了,这个ABC应该显示在第一位。是不是啊,我再发一个啊,再发个CBA啊,应该CBA第一位是吧,来看一下是不是啊很关键,走你。是不是CBA第一位?当然,我要是还要跟别人聊。诶,这里面有个问题,头像一直没显示。啊呃,这个地方这地方头像头像有个问题,我看报错没有没没报错是吧?啊,我们看一下那个那个这个里面的数据,数据的话,我们来去瞧一瞧啊。
34:19
就我们这看的一直都没有吗?难道每个人都没有吗?就是看一下我们怎么看啊,其实很简单,就最后把这个可以给的什吧,是不是打印输出一下真的吧,当然你也写个写个第方小试也行啊,因为这不是什么太大问题,我再看一下。因为很明显,我再看一下这个里面到底有没有焊的。对吧,看一下这个应该是没有啊,对,这个里面没有啊,这个里面没有在user里面啊对,所以说我们这搞错了,我们遗憾的肯定没有对吧,麦进去根本就没憾的是我们想错了对吧,那也就是说我们还是要从哪个里面去取,邮政里面取,这个时候就挺麻烦了。
35:04
啊,那又要搞这个结构,那太麻烦了,对不对,因为我们要决定那个优者嘛,来这个地方,那我们就稍微去改一下我们的这个代码啊,不能这么做了,这么做已经不行了,这么做了大家看到得这么做得搞个大括号。对吧,搞大以后呢,最终去一个小光。能看到这样的话,在这之前就可以写一些GS对吧,我主要需要确定一个什么,确定一个东西叫他给他邮走,有没问题没题吧,我要确定个他给的悠着对吧,而他着怎么确定了这个好整就看什么,看我的这个me to和他。是否相同对吧?如果它相同,我应该去user死里面取谁了。
36:03
买。不对,是from是我吗?那我要取目标用户,那不是from吗?是这意思不,那否则呢啊,User是user是中框message点什么嘛,是不是这概念,那我得到了这个他user那就好办了。那就好办很多了,比如说啊,我们的这个hand是怎么写,他给user.hand有值吗?对不对。是吧,有值干嘛呢?能看到好,接着我这个是要去显示他的user,什么user name必有。是不是概念啊,看清楚啊,刚才我们写的有问题是不是。出来了出来了,而且我们这个顺序也是没有太大问题的,对不对啊。
37:05
大家看我再聊一个啊,最后再聊一个走,你这是四啊A走。可不可以可以对吧,我们再做一个小事情,我点进去。不可以聊天嘛,对不,那怎么做呢,是不是要加碱基比这里面。干嘛等于?干嘛去时间时间。History吧,是history对吧,点是妈妈push还是replace push吧,因为要回退嘛,路径是多少呢?斜杠差下面的。好,这个是不是要动态指定一个值,动态指定一个值,那这个值在哪呢?我是不是一个T的user手机中点。
38:14
什么?他肯定着。呃,我我需要他的ID是吧,我我我哪有他的ID呢?我这个我这个他里面有他的ID吗。啊,这这个这个我要需要他的user,我是根据这个user死去取的是吧?啊这有是我的呀,有者是我。是不是概念,也就是说我去跟某一个人聊天的时候,我是不是要知道对方的ID。这能懂吗?需要对方的ID,那需要对方的ID,我这个user里面user有哪些信息啊,我看一下。啊,我呃,我可以去取他取这个忘了取这个,大家看到我们message里面有那个上面ID吗?有那个from或者to对不对,只是我要决定到底是from还是什么,还是to。
39:13
是不是概念也就刚才其实我们应该再定一个名字啊,再定一个,我要先决定一下啊,决定什么呢?叫target ID target的UID啊,或叫target就叫的UID吧,听懂不?我先把这个确定下来再说,来看看我把这个先确定下来啊,这个写法就是后面我需要这个东西。如果它们相等,那那个他的us是谁?Message from,否则呢,Message,什么to?那有了它以后,我的target user怎么?有的是中括号,他给的UID后面还是一样的用法,对不对,没有任何问题,那也就是说我们这里面是不是得到了什么,得到目标用户的ID,这一个是得到目标用户的什么信息吧,对吧,得到目标用户的信息,得到目标用户的信息好了,那我现在需要什么,他可能就是ID放到哪个里面。
40:24
发到这里面。对吧。能不能看到,好来瞧一瞧,那也就是说我现在点进去走,你出了没有。是不是可以聊啊大哥CC好聊一下好,现在见面回去界面有变化。是不是轻松就实现了,因为这个聊天的功能咱本来就有嘛,对不对,我要跟他聊一下,他就要去上面去。
41:01
走,你。走里对吧,对的没有问题,这个其实难点的地方主要还是上面这。这个有一个基本流程,大家先按照这个流程做,做完了以后再去自己看看自己能不能把这个流程自己分析出来,再去做一遍,大致要写两遍啊,这是个锻炼的过程,就大家以后呢,很可能就不做这个东西,这个东西十有八九是不做了,但类似的东西他会做。啊,这种分析能力大家要有啊行。
我来说两句