00:00
那在它的实现里面呢,会用到组件的一个非常重要的属性叫看。但这个咱可能没讲过,不知道讲过没有。看tax见过没有?啊。这个属性。啊。好,那就不管了,不管讲方面我们都讲一下就行啊,这个比较简单。那这一个属性出来的啊,用处是什么?我来先说一下场景。这是一个组件,这是一个子组件,这又是一个子组件,这又是个子组件,很多层次嵌套,这个能不能懂?如果我这一个外层的组件要向它的这一个后代组件传递一个属性。用什么方式?如果用props该怎么办?是不是逐层传递?稍微有点费劲是不是?我们能不能冲的一下到这里来。
01:01
可以用订阅消息订阅发布对吧,那不用第三方能不能做了,那就很难了,只能用pro了,对不对?好,他其实有一个专门的方式叫context。Context是一个容器对象。什么意思呢,这是个容器,这个容器呢啊,我这个副主件,如果比如说像他要传一个数据number。能听懂吧,那我就把这个number放在这个什么容器里面。那谁哪个组件哪个后代想取,你就声明一下,你就可以取到。能听到不类似于我们圆形链的那种感觉,是不是这能听懂吧,这个就是直达目标要经过中间的。这些组件码。不用。任何后代之业,你只要我生命往这里面放了,你任何的知见都有能力来去取。
02:03
Dinner吧。这个技巧不懂啊,这个技巧我们在我们的这个库的实现里面就是非常重要的一个技术。来,那这个怎么用呢啊。我来通过一段代码来演示下,这个代码都不用大写。看好了。不用想啊,我们分一下就行,这个很简单,我来复制粘贴一个页面。写一下这是谁的使用呢?那这是看的使用零六是吧,看的使用没问题,来打开它。先要把这个语法给大家说清楚才能说啊。好,把这一片都干掉。没去中啊。按表有分,太差了。
03:06
好。差不多了吧,差不多了,来把这个代码,其实这个代码已经写好了啊。我来说一下啊,这些先打开一下。好,这里面说一个事情,一共有几个组件呢?三个组件,其次这个是A组件。这个区域是B组件区域,这个区域是C组件区域,他们是个三层嵌套,听懂了吧。好,这个C,它是不是有一个红色的颜色呀。颜色值本来是存在A状态里面的。我想把这个数据呢。直接让C看得见。能听到吧,直接谁看见,按正常情况来说,是不是先从BC。这会做吧。没错,但是我们这一次不是用的。Context。
04:00
来看一下什么意思,这个是A组件,这个是B组件,这个是C组件,我渲染的是哪个组件?A组件标签,而A里面包含了哪个组件标签呢?B,而B里面包含了谁的C,是个线量关系吧?好,大家看好了。啊,来这个地方要说一个事情,我们现在状态数据里面有个卡了,为什么。我要把这个red给谁?给C。是吧,我也不用他给谁,我是给所有想要的人,想要的后代,听懂了吧,只要属于我的孩子的,你都可以去。但是你取得要写点说明,要声明才能取,对不对,我先声明,这两个其实都是一种声明来看一下。这个是在声明什么呢?声明我的属性数据的一个名称,以及它的什么。类型,但是看到这个名字,这个名字不能随便瞎写,这个不用背啊,背的没什么意思,叫child context types什么意思呢。
05:08
我交给孩子的那个看的数据的什么类型,名字叫什么,好了是什么类型。怎么串?这个必须得声明,光有这个肯定不够,还有下面这个也懂也好懂,提供了一个方法,叫get,这个名字也是固定的get child context。看返回的这个context context是个容器对象,听懂了不?就像当类似于SP的对象,我们面对象是不是也是个对象里面想放的,是啊,我们往看传了一个什么,传了一个什么属性卡了。这指定的属性吧。是不是接着属性值从哪来。也就是说我这个值,到时候我的孩子得到的值是多少呢?
06:00
是不是我这个状态的什么卡了的什么,那我怎么的点什么卡了,这能听到。可以吧?那其实这个地方是不是就是我的最外层的副组件声明了一下,我向所有的孩子提供一个数据叫什么?Color值是多少?而且要说个事啊,一旦副主键更新了,那直键也看到最新的值,听懂了吗?好。我的B。他有声明去接收吗?那他去取能取到吗?说白了就是这样一个意思,比如说取什么取的,我跟大家说一下啊,我直接取一下是this里面有一个属性叫什么呢。那我要取应该是哪个属性卡了,那取不到是多少。And find没有不就find吗?能不能听懂来,我就有意的故意的取一下啊,当然是没有的。
07:03
能不能听懂好,但是我的C呢。来看一下C在这里面做了一个什么。声明。说我接收的我的context内部的数据的类型的里面一个名称叫什么color,职场类型是是你只有做这样的声明,你才能看得到。那个数据说白了其实是容器里面放的数据,但是你要不声明吧。就拿不到。你就看不见,听懂了不?你得说啊,你不说就不让看见,这是一种比较保险的做法啊,好,等会我要说为什么他要这么做啊,先看这个结果行不行,好,那最终我在显示的时候怎么显示的。This时间看条点什么看了,刚才我们是不是写了一次,但上面这个是不是得不到下面这个什么。
08:01
得不到,还有一个位置可以取,除了在re的方法里面还有一个位置,大家注意观察。我们的构造器以前是不是一直穿?其实还有第二个参数叫什么呢?Context。其实还有第二个参数context,我们在构造器里面也可以读到我们context里面的什么color,也就我现在还写this点吗?还需要吗?不需要,因为看单子都给你了,你还写这是干嘛呢?怎么懂?好,那下面我们就来看一下,刷新一下,大家看一下现在我为什么是红色。那是因为我取到了这个颜色值,是作为我的样式的color值。那自然我就是一个什么红色的样子,对不对。来看一下打印输出。啊,C是red,诶,我的这个B。看看有显示吗。没有任何显示的原因是什么?
09:00
安find让它,如果我们在渲染它,渲染的结果是什么?空白,什么都没有,不做任何显示,听懂吧?那么吧,当然我如果在它的构造器里面跟这个C一样做的话,能取到不?啊,就是这个B里面,我也在这里面等一下,我这是我的B的构造系嘛。那你说他能去到不?这个。能不能解答color的问题?B生命了吗?有没有声明,没有声明对不对,来看一下,刷新一下。什么东西你看,说白了很简单,父组件负责提供,是不是所有的子组件都有能力去获取,听懂了不但是有能力,最终的结果是要你怎么样才能看到啊?
10:00
声明对不说明了,那是一个声明接收是吧,你要不声明这个东西就得不到。这里一共涉及到这么几个方法啊,有两个静态的,有一个非静态的。这个叫亲爱的。这个是声明数据类型的,下面这个也是声明数据类型的是吧,这个要一致吧,对,一致还有一个用来提供给子间数据的。直接的看。就这个话。OK了吧,OK。好,这个语法先懂啊,我们再来说啊,还有一个问题没说。他这个设计就要问一个问题了,他为什么必须声明才能看得见呢?这个思维其实大家想这是个父组件,我生命呢,像我的子组件,暴露数据,那我不用声明就能看得见,这个太强大,也也太霸道了。什么意思?我的孩子只要是我的孩子,如果假设他不用生命就能看得见,那还要传递个啥呀?
11:06
是不是?那我要权利不就证明一下他谁都看得见是不?能听到不那个这个其实就有一点违背他的。他的一个传递的这个数据封装性的思维。这有料像做成一个什么呢?全局的数据了。知道什么叫全局的不?就是所有人只要是了孩子,都可以什么看见。他稍微做了一个限制,就是你必须先声明。声明之后才能什么看得见,就稍微做了一个小小的保护,是不是那就要不声明呢?就看不见,说白了,你要不想要,那你就别声明是不是。能听懂吧,你要想要就必须得神明,就是这么个事。啊,这个实际上是对数据的一种保护的措施啊。
我来说两句