00:00
好,那下面我们要去实现的是我整个里面另外一个来看一下,回到我们写的这个库。打开它,我们现在是不是要实现这个函数去。对吧,那这个函数是在什么时候用的,我们直接给他用上。看好了,我们这里面有个,我们实际上是不是有两个。我两个都想用是不是,那就应该干嘛。引入合并的。函数是不是啊,把这几个给它什么,合并以后将它干嘛。暴露出去。能听到不当不能用他的。是吧,得用什么。我们自己的对不对,来写一下啊,点点斜杠下面的什么。Alex。
01:01
是不是有这样一个函数,但我们现在还没实现呢,是不是?这什么呢?能懂好这个稍微有点复杂啊,我呢这么做。我说这么做,我把这个写好的先拿过来给大家读一下,我们先来理解一下再来写啊,这个稍微有一点复杂度。来注意观察啊,注意观察,把这些注释都先去掉啊,注释去掉,等会我们自己写。这个稍微有有点小复杂,我们看干嘛啊,首先啊是返回的一个函数,没问题吧,返回的就是什么函数,Reduce函数,Reduce函数接收两个参数,一个是一个什么action,这什么意思。默认值是个什么?为什么是个对象?不管数组不管,这不算。你要知道我们新的总的管理的状态永远是什么结构。
02:05
对象结构,那你对象结构的初始值因为什么好?空对象。是不是我们前面我们做的,这不也这么做的吗。大家想想看,我们在写的时候,如果我这是个数值,我是不是初始一个数值,如果管理的是个对象,我是不是初始化一个对象?那现在它这里面是不是要去返回一个新的reduce函数,不管新不新的,它返回是一个reduce函数啊。是不是,那必然是state action?那是不是应该设计一个初始值比较好啊?因为有可能不长嘛,第一次的时候对不对好。你看下面在干嘛啊,下面在干嘛,下面再做一个事情来看一下,它分两步走。这个地方啊,我们reduce函数的责任是什么?根据原来的state产生一个什么?
03:03
产生并返回一个新的状态吧,这不是我们说的reduce的作用吗?根据当前的state和指定的什么返回一个什么。新的state,那它这个地方不就分两步走嘛,大家看着。第一步,先想办法生成一个什么。新的状态,最后把新的状态改什么返回?当然这两条语句可不可以合并成一条语句?可以,你直接变成它不也可以吗?是不是我这里有意的写成两条啊,来看一下,我要问他这个是个什么类型。一定要搞清数据类型,不然话活下去。什么类型不知道。不知道去看我们的,我们当前就是他嘛。对还是不对?那不调用它传入这个对象。
04:01
没问题吧,啊注意啊,我们现在就是它就是这个对象里面两个名字来。我把这个啊,暂时的放在这里。对着开行好,那现在呢,他干了个什么事?这个方法不知道用过没有,我们就要点kiss。这个对象。这一个方法是得到对象中所有属性组成的数组。那现在得的结果是什么?宿主,宿主里面有什么?那数组里面是不是就有了两个串?对吧,一个是count,一个是什么有着。听不听到?看到吧。接着干嘛去?这个reducer用来干嘛?做什么操作的累计累加对不对,我们最终是不是要产生这个函数,要产生一个总的新状态吧。
05:03
我们说总的新状态是不是应该是一个对象,对象里面有count属性名,也有U的属性名。其实简单来说,我们返回的对象应该是个什么结构,应该这样的,简单说就是调用这个函数产生一个结果,放到这个属性里面调用这个函数。反馈结果存在这里面。Small。我们外面是不是有count的函数和U的函数?调用两个函数是不是得到它对应的新的状态?最终我反过来是不就他。能听懂不?而我这个里面啊,这个reduce是个什么结构,是这个结构。这一定要搞清楚它的结构啊,就针对我们当前来说啊,是啊,有一个啊,名字呢叫U叫count,它的值呢是一个函数。啊,接收什么呢?接收state和什么呢?而且返回一个什么呢?新的状态,比如说返回一个三吧,我随便写一个啊,因为它管理的是一个什么是个数值。
06:09
那数值咱们不写成一或者二都行,是不是这能听懂不好还有一个。还有一个是什么。还一个是user者,User者它这间也是函数吧,它等于的是一个什么。对象,对象里面这个是个action,这个return return也是个对象嘛。这个对象是不是就是我得到的结果?那你想啊,我们现在得到的总状态,这是它上面写的,是这个reducer死的记录。而我要得到的总状态的结构,我应该怎么样得到这个总状态的结构呢?就是我要去。其明跟他是同名的吧?
07:00
属性名跟他同名就值从哪来,是不是调用这两个。调用这个函数。是不是传入什么了?传入我这个啊,这一个不是我原本的状态吗?我的状态是不是就是一个对象类型,说白了就这样的意思来写。传入他传入action。啊,这个呢,就呢是传入state点什么呢,原本的状态接着传,那最终我们就得到的是这个结果。这个调用会产生一个值啊,这个调用那当前产生三,那这个调用呢,当前就产生这个。这个要清楚,这个你要不清楚啊,啊没法做。虽然说代码没有几行,大家看到一共就六行代码。其实合并的写就五六行代码。啊,先要把这个搞清楚,这一个是我们reduce的结构,也就是它的结构。
08:04
这个安全来说,如果大家有定接触,你其实应该是要知道的。名是这个名字,值是这个函数。那我写在这边表意一下,就这样子。对吧?那最终我得到状态的结构是名字也是抗和U的直从哪来,值怎么来?是调用这个函数对应的函数传入对应的状态,记住啊,是state.com和state点游走。那其实这个reduce函数。就是去。调用每一个调用每一个指user。现在这一个大家看到reduce是先框KK就是那个属性零,那你说这个得到谁。是不是得了对应的函数。这个能不能看到这个reduce中高KK就是属性名,K就是cant或者。
09:07
我现在是不是得到了这个函数,这个函数吧,执行那个函数传入什么。State。点com的,当然我不能点com的,因为我是个动态的值是不是。现在传的谁?A。是不是得到了一个子状态,新的子状态对不对,存到哪去了?大家看到这一个是不是我们用于做累计累加的那个。总的对象,总的状态对象,听懂不总状态对象。就是这个这个用什么属性名称呢。是不是对应的名字,就是那个对应的配。啊,大家想啊,这个地方。
10:00
这里面我们要去说一个事情啊,我们这个返回的是一个什么。是不是一个新的总状态?总部的总的流程函数能听懂吧。这个,而总的reduce函数接收的是这是一个什么?是不是总的是对的,这个是对的,记住这是对的。是一个,我虽然说给定了一个默认值是个对象,但你得知道这个里面最终传的是什么东西,到时候要传的话。是个总状态。总状态和子状态它是完全结构不一样啊。还是大家说这个东西你要搞懂了,最关键的一个地方就是数理结构要很清楚。你一旦丢掉数据结构这东西就下不去了,而我们的总状态是不是这个样子的结构?
11:00
有看的有个有的值是这么产生的,对不对,值是怎么产生的,当我们还没产生。好,那我返回的这个函数,它最终是不是要返回一个总的状态?等下是吧。只是说总的状态对象怎么产生大数?我要不要去调每一个R才能得到组装的呀?是这意思不?这能听懂吧,我只有每一个都调用一次,是不是才能保证我得到的是一个最新的总状态?是不,那现在问题是我怎么样去执行每一个函数的问题。听懂了吧,我们现在的目的目标是要干嘛呢?简单一句话来说,一下就是执行reducer始终。每一个什么函数?
12:04
是吧?得到。一个新的啊子状态。那并封装到一个什么。是不是对象中?B封装到一个大的对象中啊,一个对象中对象容器中,而这个对象容器是不是就是我总的状态对象?我调用这个看函数,就得到count对应的数据,我调用这个U的函数,就得到U的对应数据。是吧?但注意乘的时候属性名要注意是吧,是个对应的名字。那现在问你了,我如何来去?调用每一个reduce函数了。是不是得变异它里面的每一个值。
13:00
但是这个K也不能丢。先,我是Jack,点什么呢?Case得它所有的属性名,因为属性名也很关键,到时候用的。这是个数组吧?这是个数组,数组之后呢,变利可以吧,我们先先手动着,我们用FOR1起来写写for一起,估计大家能轻松一点。啊,那拿到了每一个K吧,是不是当我们最终是要封装到一个对象里面去,那我这样。那我这样我先干嘛呢?先准备一个可以吧,叫的偷等于一个什么空对象。可以不?后面是不到往里面塞直。这个没问题吧。没问题,好了,来看一下啊,接着我得到K以后,我能不能得到对应的魅力。能不能,怎么能?
14:01
纵观费率,而这个value是不是就是某个reduce函数?那接下来。调用是吧,调用函数,调用函数是不是得传出它对应的状态数据以及X。对应的状态数据,我要问的是不是类不是。因为这个是总的state。我要得到总是贝塔里面的那个count属性的值是不是,或者是U的属性值是不是?那我怎么着?重号什么K?记得。A都是一个。能听到吧,是一个好,那返回的结果是不是一个新的状态,新的状态是不得加给你去。淘呃,用什么属性名称呢?那不就是这个K吗。
15:02
你说是不是?那好了,那你这个能懂,那我们换成流水就是一样的,这是这个呢,其实好稍微好点,准备一个啊空容器啊,总的状态什么讲总状态这一项。啊,空对下。下面是不是往里面塞啊。啊并封装到啊总对象,总装的对象中。添加大版。最后返回谁,是不是返回总状态。总装的对象是吧,没问题吧。现在洗成三部里了。应该好一点,比刚才我们看起来要舒服一点点。那我们就写好了,写好了以后,我们下一步是不是要验证它到底行不行,是不是验证它视频,因为我们现在使用的已经是我们自定义的抗reduce是吧。
16:06
这能看到这个呢,我也做一个打印输出。来打印user。这是我有的状态啊,State以及什么呢,X都可以打印一下啊,把这个加括号,把上面加下面加一下。好,我们来看一下,看看行啊,诶代码需要改。哪个东西注意观察,我们现在是点get得到了还是count吗?不是了吧,这个已经不对了,是不是得干嘛点什么count。那同理,我的这边是不是也去读取过。就不用了。OK吗?OK,好,大家看一下啊,第二个看似好像代码很少,就那么六行,但比上面要难了不少,因为上面很直接。
17:09
好,我们来看一下。一上来他是不是调用了每个,一个是抗一个,比如说老师他为什么调每个。因为现在管理的是什么总状态,对不对,我不调每个手,我怎么得到总状态呢。好,我现在怎么,我现在想看一下总状态的结构,我怎么看呢?看好了。来很简单,在这里面打印一下。可以吧,啊是一个什么样的么湿度,我们是不是有个方法叫get什么,我们来看一下,看是不是我们的所说的对象的结构。咋看着?是不是个对象结构啊,我们来看一下,哎,我们这个哪根这个不是这个下面这个不是,这是我们前面调用是吧?调用才能得到这状态,大家看一下是这项值是什么值,这一项对象有什么。
18:10
Count以及什么user。没问题吧,没问题,好,那下面走你。也就是说,我每次增加某一个状态,其实改变某一个状态数据其他的,这函数其实也什么。也调用了,但是他能记入K吗,别的。也就是说,我一次去分发,肯定要去进入某一个reduce的case。对不对,比如说我增加是不是进入这个可以。那如果我下面加case会进来吗?不会因为正面就要说一个事情。你的那个T值。不要重复了,听懂吗?听懂吧,好。那这个时候啊,增加可以减少了,看一下是不是也可以。
19:02
没有太大问题,OK的啊。增加,这次不能增加是吧,因为它是偶数,好一不增加,总理。可以啊。当然我们现在写的这一个。嗯,是用的,嗯,自己手动的去添加的来看一下。我们用reducer该怎么写啊?来,我写一个干净的版本啊,在下面写一下。啊,我这里面呢,也不去写什么注释了,直接写个干净的得了,来这个地方啊,要说前面都一样。是吧,这个结构是一样的,我把这里写了啊。这个里面该怎么做呢?我们最终是要返回一个总状态。那总状态是不是要去调每一个reduce函数往一个对象里面累加,是不是?这怎么做的呢?首先我需要去得到我reduce这个对象里面所有属性,民主怎么可以?
20:12
利用它调用一个方法叫。对六是不是说冷积冷压的吗。我要累计累加一个什么东西呢?一个空对象,因为最终我们的状态是一个对象嘛,是吧,那好了,在这个里面是不是想办法往这个对象加东西。好,那这一个啊,这个函数里面,我们函数一般怎么写啊。一般比较浓统的行吧,是再来一个item。而现在item啊,实际上是每一个K吧。写K比较贱明之意听懂不?而这一个实际上就是我们累计累加的一个总状态吧,那我能不能把它写成total什么偷偷可以可以不可以?好了,接着这个里面开有什吗?
21:04
是个空对象,是不是,我们是不是要想办法往这个对象里面加,我们产生了新的状态数据。属性名必然是哪个名字可以。对,不值从哪来呢?值是不是调用这个K所对应的reduce函数?我怎么得到那个函数?中号什么,可这样是不得到数了,加括号是。是不接着是要传参数啊,调什么是什么。就是这二线关键是对,我要问大家,先问大家我这么传对不对。这个不对,因为这个传的是总状态,这个结论就错了。听懂了不?我要传对应的状态,怎么得到对应的状态?
22:02
这就对了。诶,你喜欢上面这些下面的好像又好一点。这个有没有看到。那这个跟上面其实结果都一样。嗯,我们可以稍微测试一下,这个改成他这改成二是吧。呃,1万。诶,我们是不是有个地方写错了。A use of afi。Of and find。我看一下他是雷行,是我的这一行是吧。User。Ofin。嗯,我这有什么哦,这地方有个事情啊,有个事啊,我们每大家看到每一次这有个事情没做,最后一个操作没做,幸亏来测试一下。
23:11
是返回啊,你要不的你下一次统计的话,那不是知道吗。这种不好来。可以了吗?是不是可以啊,可以没有问题啊,是可以增加的,OKOK,可以啊,没有问题。好,大家需要去啊,能够去把这个搞清楚,这个还是一句话,代码不多,你看就写下来,一行两行,三行,四行,五行,六行,七行八行,就算这个一共才吧。很多时候都这样,就代码没多少,但并不代表他没难度啊,所以就这样。
我来说两句