00:00
有点小费劲,来,我们来写一写。嗯,下面这个呢,是要去来看一下,写这样一个整合reduce的一个函数来,刚才我们说过这个描述,这个描述很关键。把它拿下来,我们看这个写它接收一个包含多个reducer函数对象,哎,这是一个对象是吧,里面包含的是多个是吧。Reducer是吧?那个属性名是什么?属性名是那个函数的函数名。对吧,而直就是个函数,这很关键,能不能实际上就是一些方法嘛,对吧,好来啊,返回一个什么新的,我怎么把它写成代码。
01:00
Return返回一个函数啊,你既然是reduce什么,那就应该接受一些特别的参数。是不是是对的X,而且整合以后的是传的是对的,都是传播对象。能不能,而对象里面是不是我们具体的一些状态呀,啊,所以我给他一个初始值是吗?是一个对象。能不能,如果你不传,那就是个对象,必然保证他是个对象啊,好。还要知道啊,这是一个reducer啊,这是一个reducer对不对,那reducer最终返回的是什么。Reducer是不是一个状态呀,而这个状态也应该是个对象整合以后的一个状态,对象嘛,能不能好,那也就是什么意思呢?其实呃,其实来看一下我们下面这就是个,记住啊,这一定要是个reducer,那这个reduce什么色调呢?这个但实际上最终执行是这个reduce什么意思呢?回过头来看我们的这一个尺度啊,看我们这个A是这啊,这个应该看上面啊,忘了啊,大家看到我们这里,我们这里面是不是create接受一个reducer呀。
02:24
是吧,而接受的是哪个reducer,是某一个某一个具体reducer吗?不是,是不是整合以后的,而整合的是哪个?就是它吗?也就是说这个函数,这个函数会传给谁create多对吗?穿的就它你看嘛,我们这个地方大家大家回过头来看一下这个这个落我们是不是赢的他呀。
03:02
是吧,你他你看这个是什么。说整合以后也执行这个combine reduce以后返回的结果,我们用呢。而这个返回的谁就这一个,这一个这条语句返回了。那不就他吗,看上吗?我们用的时候不这么用吗?大家看啊,我这样传,传一个这个再传一个什么。Cant,再传一个什么messages,最后最后啊,这个又会传给谁?尺度,我们这么搞的吗?是不是那这样想啊,我传给这个亏的斯的是谁呢?不是这个函数执行返回的结果吗?这个函数执行方的结果是谁?那不就它吗?
04:04
对不对。对啊,这个没问题,好。我进去的时候我这样调用啊,大家看到亏的是多的时候。一上去还记得吧,这个地方它会去第一次就会上来就会执行一次,是不是执行的是谁呀?是我返回的这个函数对吧,但是前面看过看过一个事情,当我去执行那个整合后的reducer的时候,它实际上是干什么事?调用所有里面的各个reducer是不是一个接一个执行。能懂不,那也就是说什么意思呢?这个地方我给大家写一句话,看看大家懂不懂啊,分一次调用啊所有的reduce函数对吧?调用每一个函数是不是都得到一个状态对吧?得到状态,但是我返回来是某一个状态吗?是吗?
05:16
你看我调用不reducer。调用reduce所有的reduce函数,就每调用一个reduce,是不是都得到一个状态?那最后我要干嘛呀,你看我去调用,看是不是得到一个数值。比如说假设得到二可以吧,我调一个message,假设得到一个这个,那你说我最终返回的那个状态应该是什么结构?首先返回的状态肯定是个对象,对象里面有什么属性是固定的?Count值是多少?二呀,接着message值是什么?数组ABC这个能不能懂?
06:07
其实简单来说就是去调用每一个函数得到状态,再把它们什么封装到一个什么对象里面,得到N个状态,对吧,得到N个子状态吧,可以吧,子状态这个干嘛呀,要。封装成什么对象并返回?哎,我们最终是要返回一个状新的状态,返回一个整合的状态吧。这个能不能看到。啊,大家看到啊,我们现在要依次去调用所有的函数。那得到N个子状态,新的状态啊,新的子状态啊,新的状态吧,新的状态接着将他们什么封装成对象并返回,诶封装成对象就有一个点,因为你拿到了一个新的数据,你要封装到一个对象里面,是不是要指定一个特别的属性名,属性名是不是就是这些指定的名字?
07:15
能不懂,实在是不是就是reduce里面的某一个熟悉名,对不好,这个怎么做,下面我就用代码来翻译这句话啊,看这地方,因为最终是不是要返回一个对象。我这里我先什么呢?准备一个好吧,我先写一个,写一个容易理解,但是呢,编码代码量多一点的版本,后面呢,再写一个代码剪辑的版本啊。来,看到这里我写一个叫六层的,是这对象,这是我们包含所有新的状态的一个容器对象。准备啊准准备一个包含啊包装啊,就叫保存吧,用来保存,用来保存啊所有哦,新状态,新状态的什么呢?容器。
08:18
底下准备好了吧,那准备好以后,下面我要干嘛,大家看到一次调用所有,那我就干嘛去。我是不得便利去。对不对,那我怎么编译对象里面所有的内容呢?对不,这个地方来object点什么呢?诶有Venus和case,这一次要用case,因为那个属性名很重要。属姓名很重要,KK谁K是它,那也就是说现在我得到的是不是这个数组啊?请问我是一个什么样的数组,对于我们当前来说。再一个啊,说一下是啊,包含所有啊reducer函数名的数组对不对,实际上就是谁对我们当前的情况count,哎,这是主串是吧,还有一个什么message对不对。
09:25
这个能不能懂,好能懂我们继续往下啊,下面干嘛呢,便利所谓的K。那么呢,比例。好便利,怎么便利了?那正常编利100方一起呗,对吧,拿到为K吧,好,拿到K了吧,拿到K我最终是不是要去调用reduce函数的。那我现在要得到一个什么?得。
10:03
我是不是有一个reduce,是所有reduce的对象嘛?包含所有利润,记着干嘛?什么K?中国,可正因为它是变量属性名,是一个变量值,对不对,能不懂看懂吧。能不,那下面干嘛,他不调用它呗。啊,得到这里面是得到对应的reducer是吧,函数接着是不是就执行啊执行reduce好执行需要传什么。这个很有意思,需要传两个东西,一个是状态,一个是什么。一个不就是X吗,是吧代,那我这个是穿它行吗?是穿它吗。
11:05
这个是总的状态对不对,这是传的总的状态,这个不对,这是包含所有子状态的一个状态,对不对,我应该是不是传这个reduce所对应的那个状态。什么意思?我先看到,先取下叫得到对应的什么的状态,对应的当前旧的状态,怎么样得到当前对应的状态呢?真到吧,哎,我取个名字啊,取一个什么名字呢?嗯,这个名字好像挺难取的啊,嗯,就是就是嗯,譬如说这里面要搞一个啊,譬如这样吧,我来改一下名字。子啊,这样就能区别开来,那么呢,我当前这个子啊子reducer是不是这个。
12:01
那它所对应的状态是哪一个呢?这我一写大家就能懂啊,STEM高。我刚才说过了,我们的这个状态,我们的状态的结构是不是跟这个结构一致啊,属性名是不是都是这种名字,所以我得到就属性这那个状态好,下面干嘛呀,传什么。你执行子reduce什么对不对啊,强调一下子reducer子状态。啊,接着是执行指R好传什么的state,传统一的什么action。能看到不好,我去调reduce,得到的是什么?是不是一个新的状态?啊,但是啊,来看着啊,看到我这新的状态啊,我我先先一个变成什么,看斯叫六啊七二的什么意思,哎,看是不是得到我这个执行子R产生那个新的子是对的。
13:24
是这个意思,现在我要管它干嘛?我是不是要存起来。是吧,保存到总的新的state里面去嘛。保存到啊。嗯,总的新的总state中对吧,来存一下new state中告用什么名字传呢。都是用一个东西,同样的KK很关键,对吧,等于new的。
14:06
这能不能看懂,那也就是说我去调用这个函数,大家看看,我去调用这个函数,它会去遍历每一个。是不是子多少执行得到一个新的状态,接着把它们整合起来吧。能不能?那最后得干嘛呢?你想想我们的这个函数,四个reduce reducer的最后的结果是要一个返回的,所以返回什么六是对的。返回啊,总的新state对吧,就这么个事。
15:03
好,那现在呢,我们就这一个写好了,写好以后要做一个事情。切换一下。是吧,切换一下来啊,我们的这一个。我们这个这个叫叫B叫他看一下啊reduce combine病combine病我们在哪整合的,在这里是不是在这里啊整合的来,那我们需要把它什么。切换一下不用它了,用我们的。啊点斜杠啊还是点点呢,应该点点吧,点点斜杠,Nes下面的re是不是也有刚好有一个名字啊刚好就对好。下面就要看结果了,结果如果好的就没问题,如果结果不好,那我们就要去改看一下啊,有什么问题说啊R没有什么定义,我们redu index里面第多行,第60行,我们来看一下啊,第60行。
16:23
他吧,我们这个不叫reducer,叫什么叫是不是亲爱的reduce懂不懂?来啊,再往下继续看啊。应该可以来,让他去跑一把。接着看说什么说我们index里面的第段行70行啊,77页就在COUNT1NOT,什么DeFine啊,第70行。哦,我这个没什么,我刚才是不是自己写一下对吧,把它去掉一下。
17:09
来了啊,关键这个还还不够是吧,这些还不够,大家看是不是掉我们的,现在这一次完全切换我们的,你看这没有它的打印了。那么呢,好看我们的行不行,很关键是吧,三加A。可以哦,是吧,没有问题,你看挺好的,增加这次能增加吗?不能异不增加可以吗?添加一个走你走你也挺好。这我们也没写。这是一个啊,这是一个我自己啊。比较怎么说呢,这个可能是大家现在能懂一点,但是真正写的话可以代码少一点。可以编码少一点来,我写出第二种方式啊,就是简洁的写法写一下啊简洁写法写号我我改一个,我改一个名字吧,可以吧,我改一个名字什么意思呢?实际上你没发现这是在做累加吗。
18:17
再做累计。啊,大家看一下啊,我在这里面看到吗?我直接上来就来一个。可以吧,怎么搞呢?先得到,我们要变利嘛,只能通过K来变利,点什么呢?Reduce。有没有看到,而这一个reduce啊的结果,是不是就返回我的最终的一个新的状态?是吧,而初始状态是多少空对下。就是开始没没有去,我是不是要不断的去调用一些函数嘛,这不是在累积累加嘛,调函数过程中是往这个对象里面加东西,下面呢,好,下面这个里面啊,得写点东西啊写东西那我就先把这个结构搞一下啊。
19:16
能不能看懂,好这个里面啊,这个里面给传点东西是吧,那我就给他传一个new state可以吧,接着了。啊,这个里面啊,是不是某一个什么,大家看呢,某一个配应该说是不是。真的吗?你看我是便利case吗?或者叫或者叫什么呢,是不是也可以。对吧,只是这个比较长而已,是我reduce的一个名字。摁了不可不可以理解,可以理解啊好。
20:02
最终啊,我们看到啊,我这里面返回来就它,但是前面呢,要做一些处理以后往它里面加东西。这个是不断累加的一个东西啊,而累加的最终累加的结果就是我整个的返回值。那我要你家干嘛去了,对吧,我是不是要去想办法去调用某一个reducer。怎么样了?这不是reduce死吗?我要得到一个reducer,怎么得?中括号什么r name,记得干嘛执行它对不对,执行它呢什么呢?传是不是首先得传我当前的对应的状态,状态就是总的状态。对吧,接着呢,也是这个。是不是接着X呢?那不就X吗?
21:02
是吧,返回的是一个新的状态吧。新的子状态,而这个子状态应该放哪去?放到60倍的什么属性里面呢?Redly。好了。这就这就是在说。就是这样的一个这样的一个过程啊,就是把刚才的那个啊,因为我开始定为了能够说说明大家一个过程定义了很多变量嘛,对吧,所以说语句更多一点,那也说我们现在不需要他们了是吧。你要写出这种代码给别人看。肯定不会差哪去。嗯。
22:00
啊,但是行不行还不好说的好,我们先来测一下它行不行,行不行很简单啊,就是reduce里面。啊,我引入的不是他了,是什么什么I啊啊,这个也是什么啊,如果依然还可以,那就说明问题是不是很简单。嗯,那可以是吧,没什么问题,可以再添加一个,诶好的是吧。就做好了,这就这这里面啊,呃,大家先要去把第一种写的方式去理解啊,理解之后呢,我们才有可能去把第二种简洁的写法啊去展现出来,因为第一种写法呢,其实是比较好懂一些的,就一步一步来,你慢慢做。啊,这个呢,就利用了这个reducer啊,去做一个,主要我通过这个反复练习,大家看到了reducer不能仅仅是做什么12345678数字相加,那个太low了。
23:05
啊,这个也是可以做的,大家只要用熟练了,你会发现很多时候都可以用reduce。嗯,方法来去实现你的一个累计累加的效果。好行,那我们今天呢,就先讲到这里啊,我们先讲一个库啊,另外一库呢,下次那下下周我们再讲,因为还有一个库嘛。就这个裤。这个库里面呢,也是实现了它一个核心的一些基本功能,行,嗯,后面我们讲的时候再跟大家详细的说。
我来说两句