00:00
下面我们要学的这个东西啊,非常难,现在先说一句话啊,挺难的,挺难的,但是我得想方设法让大家尽量学会一点啊,就稍微慢点讲啊,OK,而且大家尽量在我去跟大家去说他的一些原理,说他的一些想法的时候,大家应该要尽量接受,先接受想法,再去说来语法,他主要是语法上面啊,套路太深了,导致于学家费进,并不是他的想法有多难,而他的那个套路就是大家知道啊,就任何一个库,他都有自己的套路,都有一套自己的想法,靠自己的做法,你必须按照他的套路去做,你才能做出效果来。才能用上它能懂吗?啊OK,就是这个下面要学的这个东西啊,就这样的,一个是套路太深。来啊,我们来看一下。呃,这里面呢,它有一个有一些学习文档啊,这里面呢,主要是去看啊,英文的中文说错了啊,应该看中文。
01:06
嗯。有中文的就看中文没中,没中文的那就看英文了是吧?好,这就是的一个中文文档的一个界面啊,其实大家也可以应该可以在这里面能看到。就这。大家不用去搜索啊。这个后来是大家应该都有了吧,嗯,行。嗯,我们所需要的基本上都在上面啊。好。那现在呢,大家不用在这上面一点一点看啊,就是现在因为我跟大家讲嘛,所以嗯,如果你去看他了,可能费劲一点,大家先把我跟大家说的学的差不多了,大家觉得还不够啊,就可以看一下上面也给他过一遍,这个得花一天时间啊,你看一看。会对他呢有进一步的认识。好,先来说一下redux是什么。
02:01
是一个设计,好像就说我跟大家去讲东西都也是一个套路,它也是也是有套路的,并不讲任何知识,他基本上都是同样类似套路,先告诉是什么,起什么作用,为什么用,后来怎么用。对吧,啊,那它是一个什么呢。你就说你想到想到这个东西,它是一个RA的插件吗。是吗?不是有人说老师你刚刚说了,那如果他叫react,哦,那我就是了,对吧,他既然没叫名字,那应该不是,对不对,那确实你猜对了就不是。它是一个专门用来做什么状态管理的JS库,我强调了一下。不是RA插件。懂不懂只是说它更多的用在应用里面。那你说老师我能不能用在啊安管应用里面,能不能用在这快应用里面可以。
03:03
但是呢,用起来比较麻烦,你懂吗?也就说白了,它的适它跟的适配度比较高。用起来比较好。而跟别的库配合了,能用能起到它的效果,但是用起来比较麻烦。那自然绝大份的时候。甚至说基本上都是用在什么react的应用里面,但是你不要把它看成是一个react插件,不懂它不是,这个很关键啊,因为一旦问到它就有可能设置下这样一个陷阱啊,问他是不是一个react插件啊,不是。啊,OK。它的作用是什么呢?刚刚简单说过啊,管理RA应用中多个组件什么呢?共享的状态啊,其实你单个组件的状态它也可以给你管理啊,也是可以给你管理的,这个在说什么呢?其实我们前面举就举我们那个。
04:02
评论管理的应用,还记得我们那个组件结构吗?最外围是什么APP,接着上面是,呃,我们是,这是头部左边。左边这个什么爱,右边历史里面有什么艾这样的吧,OK,其实我们啊,已经对状态进行了一定的管理,我们是放在哪个里面,管理APP里面。对吧,放到APP里面去管理啊,其实我有个观点啊,叫集中式管理。就是用,就是对状态进行集中式管理,其实我们已经做了。但是我们这种做法啊,对于小的应用来说其实还好。哎,没问题,基本上我们也做做的挺好的,也是集中式管理啊,就集中在APP里面管理嘛。
05:02
就是我们说过一句话,主状态在哪里?修改状态的行为是不是定义在哪个组件了?那就是集中设置管理,把那些修改的行为都放在一个组件里面。听懂吧,啊,OK。但是对于一个大型的应用来说,那我们现在这么做就会很累,很费劲。啊,因为我们单应用有很多路由组件,每个路由组件是不是也有子组件呢。啊,那你说你全部全部都搞到AP里面。那个不太好,不太好整怎么办呢。后来就有人就是想,诶,我能不能专门啊有一个库。把那个状态都交给他来管理。啊,所说的管理其实很简单,就是状态放在里面,再提供一些修改的方法。能不能,那哪个组件需要,那你就去调。
06:00
能懂大概能懂意思吗?啊,就专门用一个库来去管理我应用中的状态。这样的话啊,我们的组件是不是就要去找那个,说白了就找redux去调查对应的方法吧,我要修改,那我是不是调用修改的方法。我要删除,那你给我一个删除的方法,我就掉。但是啊,你要知道状态,现在还在组建内部吗?放哪里去了?是不是Du里面,其实这个思想很重要啊,你先要有这个思想下面编码才能体现出来。这就是一个啊,对组件应用中组件的状态进行什么呢?集中式的管理。啊,这里强调一个啊。其实我们现在我们做的那个评论的应用已经有集中式管理了。因为我们现在比较简单,所以做起来还不太费劲,但是如果涉及到一个大型应用来说,因为状态更更多了,组件更多了。
07:03
那再这么整,那我们自己去整,那特别费劲。那费劲的话,自然有人去想这个事,知道吧,一旦觉得做什么事情费劲了。那自然就有了一些牛人,他因为他们也是在他们也有体验,知道吧,他们老说了大型应用有体验。那我是不是要写个库来简化一下?啊,致爱酷就自然产生了。好,这里面它有一个图啊,这个图呢,最终我们是要去给他看懂的。啊,OK,大概我们先看一下我们能懂的东西啊,有几个部分大家应该懂,这个应该是能懂。这什么?主件好一个组件呢,大家知道一个组件有两个方面。一个展现数据。对吧,一个是跟用户交互更新数据。懂不懂啊,所说数据布局状态吗?两个方面啊,记住了,一个是读状态显示对吧,一个是需要去什么更新状态对不对。
08:08
啊,更新状态。通过这个图来看我通过谁来去读状态显示。哎,这里面他有一个这上面的代码都是都是谁的代码,都是代码。说白了,就是我的组件如何跟re进行交互。这意思吗?因为我们的redu是管理的状态啊,那你说啊,它在里面啊,Re,里面有一个非常核心的对象,取了一个名字叫S多,什么意思?是什么意思?存储?能懂吧,仓库啊,就是一个石垛啊,相当于是个容器,它是对当时面最核心的一个对象。那看这箭头什么意思啊。也就是说我的组件从哪读状态诺,也就说这个对象是不是有方法来跟我去提供。
09:05
因为是多不被他管理者嘛,他是个管理者能看出来吧,啊看懂啊,你不要说完完全,至少说大概知道他是怎么回事,这样的话我去读状态显示就搞定了吧。下一个第二个我的组件还需要什么,是不是更新新的状态显示,那这个流程就会有点长。是这样一条线路。有点差吧?这个是最难的。你说独装的形式很简单。这条线路最复杂,这条线路里面啊,就涉及到譬如说我组件里面有一个按钮。叫删除。对吧,可能会删除我状态中的某一个数据吧。那你想啊,啊,这个时候他要干嘛呢?他是不是要去通知这个点删除的时候需要通知是都要去做删除。
10:02
是更新状态,那怎么通知呢?通知一个东西是不是要只调用一个方法呀,对不了,不懂,我要通知别人干一些,通知是多干一些事情啊,使多有一个方法。其实非常简单,叫什么?Despite despite什么意思?叫分发。我们一般分发的后面写什么呢?说什么呢,分发事件。说白了就突发事件。能不懂啊,OK,说白了,现在我们一旦点击按钮,我就要去通知那个对象。去更新状态。那分发的时候传了一个什么呢?需要查一个东西,叫action。这是个对象,我告诉你这个对象里有什么啊,这个对有两个属性,两个方面属性,一个叫type,一个叫date。
11:00
T保持固定的。还记得我们触发事件要整理什么吗?触发事件要指定的什么东西?触发事件的指定回的函数啊。触发事件要指定什么?我们说绑定事件要指定事件名对吧,和回调函数。我绑定事件,绑定什么事间呢。对不对,回调函数是什么呀,那我触发事件呢。触发事件呢,要指定什么东西?说白了,你发消息的时候,我们事件那个订阅和的那个消息,订阅和和那个分发机制还记得吧,发布机制,发布消息的时候要指定什么消息名是不和数据啊,你触发事件的时候不也要指定事件,你指定你就触发的什么事件呢?是点击。还是失去焦点,还是过的焦点?对吧,你要不要传递数据啊,对吧,传递什么数据啊。
12:04
这个都是需要指定的。我说过了,我前面就说过,你要对实践机制有一定理解,你后面学东西就很轻松,因为思想都一样。现在我要通过dispatch去通知这个多对象去更新状态,那这个地方就要肯定要传一些东西,因为做什么更新呢?是不是更新的时候我要不需不需要调节数据啊,譬如说我现在要删除假设删除列表中的某一项。我需要传什么?我要删除列表的某一项。下标啊,对不对,我要index。两分钟。啊,这个时候啊,其实这个action就包含两个方面。一个叫tap tap什么意思?就是名称类型,你是删除了还是添加还是更新?对吧。下一个date,看着名字你都知道。
13:02
就数据要不要写带数据啊,有这个可有可无,懂不懂可有可无,而且这个名字呢,不是固定的,但是我希望有一个有个规律可循,就所有的数据我都放在date里面。这样的话啊,你写代码的时候就有统一的风格。能懂吧,说白了T是固定的,但是这个不是固定的。这个这个type的名称是固定的啊,Data是我说尽量都按照一个名称去写。其实这个只要你理解了四件机制。那理解它小case。啊OK,好,在这里面来继续往下看啊,它分发以后,最终它如何去更新状态了。啊,他有另外一个东西,这个东西挺难理解的啊,就是有一个什么叫一个reducer的一个东西。它其实是一个函数。这个函数啊,不知道大家能不能看懂啊,这个函数,这是它的行参,这是它的返回值。
14:05
你说什么意思啊?这个名字最好叫old。你看他接收一个老的状态和你发过去的action。返回一个什么新的状态?大家还记不记得在里面状态能直接更新吗?不能还记得吧,你不能写state,点叉叉叉等于一个新的value。不能。你必须调用什么set state set参数是什么?是新的状态对象啊。Eight。这一个方法就是根据你的action以及原有的状态,给你返回一个什么性状来给谁去给多。对吧,多去专门去。咱不能自己做,都交给他做。
15:02
你想吧,Set这个事情是通用的吧。懂不懂这个事情是固定的。但是新的状态到底是多少是不固定的。不固定的,得我们自己去实现吧。就返回,返回一个什么样的新的状态,这个我们得自己去做吧。对不对,你这个安检数据是多少,类型多少,这个也是不确定的吗?也得我们自己去做。啊。好,再把刚才我的两个点说一下,一个组件它有两个方面的,是要要想一个如何显示数据,如何显示状态,很简单,通过多读什么。读状态。对吧,那说明多这个这个store里面是不是保存的状态。好,下一个。我的这样一个组件里面,当我点击某一个按钮的时候,如何来更新状态呢?这个流程稍微有点长。但是其实我们主要做两个点,第一个点。
16:01
发通知。对吧,第二个点去实现这个函数。去产生什么新的状态,其他事情都不用你管,你说这个这个箭头的整个流程需要我管吗?不需要,你就需要去做那一个点就行。啊。但是呢,这个地方还有一个点没有说。就他。Actions。这个安全不就他吗,是个对象是吧。Create create创造的,创造一个对象是什么意思?就生成一个对象呗。对吧,告诉你它是一个工厂函数。诶,为什么以前我们要说这个概念,因为后面都要用到。什么意思啊,生产什么的。生产什么对象action对象的工厂函数,但action是不是有很很多种,可以有添加的,有删除的,有修改的?
17:05
对吧?啊,这个不同在哪里啊。我我删除的添加的修改的。重要的区别在哪里?怎么标识我删除?Type。就说白了,你到底是点击还是是焦点,还出还是获得焦点,是不是指定一个名称呢?说名称类型这不很好。Type就类型的意思。啊,当然你也有可能是不是要带数据啊,因为你做一件什么事情,是不是有可能有条件,譬如你要删除某一个,是不是要要下标啊。那下边是不是要也要在这个X里面。要吧,要啊,我们有专门的工厂函数来帮我们去生产什么呢?啊,身材好,这是这样一些东西的一个基本理解,后面呢,有说一个事情,就什么情况下面。
18:04
需要使用,也就是说我们去写一个应用一定要用。不一定,刚刚说过了,我们可以自己管理状态,对吧。那什么时候需要呢?啊,整体原则就是能不用就不用啊,如果你觉得不用,比较吃力了才考虑用,这是一个比较整体的原则,其实现在做应用基本上都会用。啊,你就不用想什么时候用了。你就想着怎么用就行。你不用去想了,我到底用还是不用,这种事情不需要你想,因为你进了公司已经用上。就是万一我们新开的项目呢,那你也该用上。你不用那觉得多low啊,是不是啊,这么好的技术不用啊,多可惜呀。好,后面怎么用呢,到时候再说啊行。
我来说两句