粉丝1612获赞1.9万

hey, you devs welcome back to learning view in today's video we're going to be taking a look at seven ways to improve your v4 loops and write more efficient concise and readable code if you've done any work in view then you know how essential view for loops are to creating your template code to keep it short they allow you to write for loops in your template code which is amazing for things like rendering arrays or lists and even iterating through an object's properties although there are simple to use there are so many ways that you can be making sure that you're writing code that follows views best practices so the first tip is always use keys in your v4 loop this is a common best practice that most view developers already know but by setting a unique key attribute in your v4 loop it ensures that your component and your loop works the way that you'd expect if you don't use these keys you will try to make the dom as efficient as possible and this means that certain elements may appear out of order or maybe your elements one update when your data does if we have a unique key reference on each element then we know exactly when things change and better predict how the dom will act the second tip is that we can use v4 to loop over a range while most of the time we use v4 to loop over array or an object we can easily loop over arrange like this this is useful for example if we wanted to create a page system for an online store and we only wanted to show 10 products on a page this is a simple but very effective tip for v4 loops third avoid using vf inside of your for loops a common mistake that i used to make is that i was using v if to try to filter the data in my v4 loop although this seems intuitive it causes a huge performance issue because view prioritizes a v4 over the vf directive and what this means is that our component will loop over every element and then check the vf conditional and this is super innocent so let's say we are looping over a huge array with tens of thousands of items, but our vf filters all but three products every time we re render we will have to loop over thousands of items regardless if these three specific products changed or not and the next two tips are going to be alternatives to joining a v4 with a vf so the fourth tip is instead of joining a v4 with a v if to use a computed property or a method instead so first a computed property would look like this where we're actually doing our filtering in our script and iterating only over the products that match our conditional so now our template will only re render when one of those products on sale changes as opposed to using a vf when it would rerender every time products change we can also get the same functionality by using a method that has a pretty similar filter another alternative to joining a v4 with a v if is if we're trying to decide whether or not to render a list at all for example if we only want to render a product list when a user is logged in you might want to hit code like this, but even here we're still looping over all of the products even if a user is unlogged in to fix this you can easily change that vf on being with the element with the v4 so the element wrapping the v4 so are unordered list so now if the user is not logged in the v4 loop will not run at all the six tip is how to access the index inside of our v4 loop in addition to looping over noray and accessing every element, we can also keep track of the exact index of every item all we need to achieve this is that an index value after our item inside of our v4 it's that simple and this is super useful for things like pageanation showing rankings maybe displaying the exact order of the list it can all be done using this index and then our final tip is iterating over an object so far in this video we've only really looked at using v4s to iterate through an array, but we can just as easily iterate over an object's key value pairs similar to accessing an element's index, we have to add more than one value to our v4 so, if we only want to iterate over all of the objects items we can just run a v4 with a single argument, but if we add another argument we'll get both the items and the keys and if we add a third argument, we can get the items keys and index inside of our v4 loop so depending on the data you need for example if you're showing a table or something this can be a great way to iterate over an object so that's all for this video i hope that some of these tips taught you some new best practices about using views super amazing v4 directive there's any other tips that you have let me know down in the comments and i'll be sure to check them out, but as always don't forget to like and subscribe if you enjoyed the video it really helps out the channel and until next time happy coating。

小伙伴这一章节我们来讲解一下副组间如何监听子组间的生命周期,就我近期小伙伴出去面试遇到的面积, 将通过两种方式来进行实现,这种方式就是副指组间的数据传递。第二种方式就是内部的私有的 api 来实现我们这个副组间监听指准的生命周期。 首先这种方式直组件给我们的副组件传递数据,来实现我们的副组件监听直径的生命周期。首先来到我们的组件,在直组件里面 我们引入这个 almondset amongst 之后自经营我们这个事件,自经营事件,当我们这个组直组件的生命周期加载完毕之后,触发这个方法,来到我们的副组件声明这个方法,再来接受这个方法紧张,我们来看一下效果,这就被打印出来了,这样就实现了我们这个副组件 监听直觉的生命周期,通过我们这个植物间向副组件传递数据。那么这种方式他会有一个弊端,什么弊端呢?就在我们工作当中, 我们经常用到的这个组件,可能用到的是第三方的一些组件,那这个时候你是不可能去改变它里面那些原码的。那么在我们的六三里面,他提供了一个 seal 的 a p i, 就是我们这个 iw, 直接把它翻过来,翻过之后保证你隐藏掉, 隐藏掉之后我们把这个直角间上面这些操作全部给他隐藏掉,保存一下,保存一下之后把这里纸改一下, 直接通过这个 itw, 这里在弄封号,这里写上你需要监听的生命周期,来看一下我们的效果 来发现一下,这就打印出来了。这这两种方式就是我们这个副组间监听我们词组间的生命周期的,如果对大家有帮助的话,欢迎点赞加关注。


怎么样把一个属性变成纯曲器属性又怎么样?告诉他运行哪一个函数,你给他负值的时候运行哪一个函数,你给他取值的时候运行哪一个函数,就要通过属性描述符, 属性描述符里边他记录了一个属性的相关信息,属性的名字,属性的值,还有什么?还有属性的存取器啊,存取器呢,也是属性的相关信息,一般来说一个属性的话,默认情况下他是没有存取器的,没有你直接写个属性的话就数据属性。 那如果我要做一个纯曲气属性出来怎么办呢?就需要给告诉这个介绍,描述一下这个属性,这个属性里边是包含纯曲气的。 好,那么怎么来描述呢?描述的方式就是使用一个 object, 一个静态方法叫做 object。 第二, define, define 什么意思?定义啊,定义 property, 一个属性啊,定义一个属性,以前呢,我们定义属性是不是都在这里写的,对吧?都在这里边写的,对吧?定义一个属性, 或者说呢,后边给他添加,像这样子给他添加一个属性,那么现在你不能这样做了,如果你要做一个纯曲器属性的话,你不能这样做了,你要添加一个属性,你得这样添加 object, 静态方法, define, property。 这里边呢,要传三个参数, 第一个参数就是一个对象,你要在哪个对象上面定义属性,哪个对象呢?我们就这个对象呗。啊,第二个参数呢,填的是属性的名称,比方说 x 啊,是一个字母串啊,好,第三个参数很重要了,第三个参数就是属性描述符啊,这个描述符里边有很多东西可以配置,配置是这个对象的这个属性的相关信息, 属性描述符本质上是一个对象,在这个对象里边配置这个属性的相关信息是这么个意思啊,我们可以看到这 m、 d、 n 里边呢,他跟你说到了啊,有哪些地方可以配置其中一个属性呢?叫做 value, value 属性的话,比方说啊,如果我这个对象里边啥都不写,那么 会怎么样呢?我们来看一下,然后呢,我们来看一下这个 ob 界,他说有已经有一个属性了,属性 x 嘛,对不对?这个属性的值是啥?是 on defend, 为什么呢?因为他说了,如果你没有配置这个白酒,这个属性啊,他的值,他的默认值呢?为 on defend 啊,默认值为 on defend。 所以说呢,你这里没有配置,相当于是写了个昂迪三好,那么可不可以配置呢?当然可以配置啊, y 六,比方说给他配置为一,保存一下啊,你看一下这边 ob 键,你看一下 x, 是不是等于一了 啊?那么这种写法,就这里的这种写法呢,就相当于是 obgx 等于一样的啊,他仍然是一个数据属性。好,接下来呢,我们来看一下一个纯取气属性怎么做?纯取气属性呢,无非就是给他加一些配置,一个是 get, 一个是 set。 好,咱们来看一下啊,来看一下一个是 get 啊, get, 无论是 get 还是 set, 它都是一个函数啊,包括 set, 对吧?这是属性的,这是属性的值吗?对吧?配置对象里边属性的值,如果你写的这个东西,只要你写的,他就表示一个纯句系属性了,而同时呢, 如果是一个纯曲器属相的话,我们看下边,那么他会告诉你,你这个 y 六值呢,是无效的。如果你配置了 get 和 set, 那么他的配你配置的 y 六值是无效的,比如你这里写的跟没写是一样的,看一下,他已经告诉你了啊,他说你已经是一个纯曲气属性了啊,那么你就不应该配置几个 y 六值 啊,他说不能同时指定啊, boss specific exit 就表示的是访问器啊,就表示存取器,就表示这个东西,这个东西联合起来叫做 exit, 不能同时指定存取器和一个 value 属性值, 明白这意思吧?所以说,你只要配置了纯聚器属性,你就不能设置 billion 值了啊,把这个 billion 取消掉。关注都医简介号的同学插播一下,我是袁老 老师,你能跟着我学到这里,那么我就再送你一个好东西。为此呢,我录制了一套大师课,这里边一共六个章节,每一节都是你求职比面试和在职提升必须必备的东西, 像什么世界循环啊,浏览器渲染原理啊,属性描述符啊,还包括几个经典的实战功能案例,甚至唯有的原码思想拆解等等等等。我坦率的讲,凡是里边涉及到的知识、权势的深度都达到了原码的级别, 你基本找不到第二个人能剖析到这种程度的。也就是说,一旦你比面试或者工作当中遇到了这些技术,你表现出来的水准在其他的竞争者中有着压倒性的优势。 关注袁老师这么久了,我也帮不上别的忙,那么这套大师课呢,算是袁老师送给你们这份大礼,不必客气。如何领取评论区第一条,进咱们的粉丝群,然后根据 提示领取就可以了。好,取消掉过后呢,我们再来看这个 obj 里边,这个 x 有吗?他有啊,他有 ok x, 然后呢,他变成他是 unified。 好,我们来解释一下啊,这两个函数是来干嘛的?第一个函数干嘛的呢?第一个函数,他表示的意思是当读取属相 x 时 运行的函数,他表示这么个意思啊,你,你只要在读这个属性的值,他就会运行这个函数啊。比方说,这个函数里边,我们输出一个东西, ctrl log 啊,读取数项 x, 你看,你只要读它的时候,它就会运行这个函数,并且呢,该函数的返回值将作为啊, 属性的值啊,这个函数的返回值将作为属性的值啊。这个函数里边,我们比方说返回一个二啊,比方说返回一个二。 好,那么咱们来看一下一个神奇的效果,我们输出啥呢?输出 ob 接点 x 啊,他又没这个属性,肯定有他有这个属性,保存看一下。 它输出了二,为什么输出二?是因为我返回了二,它就输出了二,明白这意思吧,返回了二,它就输出了二,它这里本质上呢,由于 x 现在已经不再是一个数据属性了,它是一个存取系数型,因为我们设置了这个东西, 因此呢,你读它的值的时候相当于是什么呢?啊?相当于是调用了 get 函数啊,调用了 get 函数,把函数的返回结果放这了,明白这意思吧?啊,你这样子写了过后呢,相当于是运行了一个函数,那么函数的返回结果是二,那这里肯定是输出二, 只不过呢,语法上呢,你看上去呢,还是一个正常的属性,但是呢,他已经是一个纯曲奇属性了,怎么来证明他可以他运行的函数呢?因为他输出了这句话,他输出了这句话,是不是运行的函数,对吧?那既然他是一个函数,是不是我们可以做任何事情, 想做啥做啥?好,咱们再来看 sit, sit 这个函数表示什么意思呢?当给该属性负值时,运行的函数。好,这个函数里边呢,会有一个参数,这个参数呢,你当然一般情况下都需要这个参数啊,这个参数是什么意思呢?这个参数 y, 它表示的意思是 表示要负的值,比方说我们这里 ob 借点 x, 把它负值为三,那么这个 y, 它就会像这里,就相当于,是啊,相当于运行了 sit 三。啊,运行了这个函数啊,明白这个意思吧? 啊,相当于运行的这个函数,你要复制的时候,他就会运行这个函数。好,比方说,比方说我们这里输出啊,一个啊,给属性复制为啊平解一下吧,啊,看一下啊,看他有没有运行这个函数,我们写这么一句话啊,看他有没有运行这个函数,好保存,你看一下是不是运行了这个函数,对吧? 你负值的时候,他就会运行这个函数,于是呢,这样子一写,这个 x 这个属性,他就不再是一个数据属性了,不再是一个普通属性了,变成了一次简单的函数直行,其他的什么事情都不管,他只管函数直行。 好,那这个时候面试题出现了啊,面试题就可能会考虑这个玩意,当然他考这个东西呢,考的就已经比较深了啊,因为很多特别是介式的初学者都不太知道这个东西啊,属性描述符。好,那么咱们看一下,现在呢,问你啥呢? 我这里如果输出一个 o、 b、 g、 x, 控制台里边会输出什么东西?会输出哪些东西? 首先你这里是不是该负值,负值是不是运行函数,他会运行这个函数啊?那么这里呢,得到的结果就是啊,首先输出了这么一句话,给属性值,负值,为什么呢?为三,他会输出这句话,对吧?好,这里输出呢,是不是又会运行函数?他又会运行 这个读取属性 x, 他又会输出这个?好,然后呢,这里返回几,返回的是几,返回的是二,那么这句话会输出多少?他也会输出二,跟这个三还有关系吗?是不是一点关系没了,一点关系都没有了? 他现在呢,是一个纯曲奇属相,他运行的是函数,你负值他掉了,掉了是函数,相当于你这里运行了一个设置函数,这里运行了一个 get 函数,那跟这个什么三有啥关系呢?没有什么关系了啊,这里得到了获取属性值的时候,始终得到的是 get 的返回结果, 那么他就不再是一个正常的数据属性了啊,不是说我们这句话就把三存在这里,不是的,不是这个意思的啊,不再是这个意思的,他变成了运行函数了,我们来保存看一下吧,你看是不是这样的结果,没问题吧,我们要把这个东西理解啊,理解好,这就是一个存取器的属性。

好,这个视频呢,我们来说一下,就是 video 当中这个 computed, 它到底是如何来实现这个缓存的啊?那么首先呢,第一点我们需要知道的就是这个 computed 呢, 呃,他是响应式的,响应式的, ok, 那也就是说当我们要读取读取 computed 十,呃,就会触发 get, 那么呃设置它的值的时候,设置的时候会 触发 set 方法。好,这是我们第一点要了解的一个内容,那么第二点呢,就是这个 compute 的呢, compute 的它是如何?它是如何控制缓存的? ok, 那计算属性呢?这个计算属性呢?它是有缓存的啊,那么就比如说我们举一个简单的例子,嗯,在 呃,这样吧,某个计算属性属性 c, 它呢?依赖 哎, data 中的 a。 好,那如果没有缓存,如果没有缓存,我们每次读取这个 c 的时候, c 的时候, c 呢? 啊,都会去读取 a, 对吧?好,那他呢就会触发 get, 触发谁的 get 呢?触发 a 的 get 方法啊? 好,那当多次触发触发 a 的 get 的时候,他是有一个消耗的一个过程的,就会很消耗咱们的这个性能,是会消耗性能的, 所以,所以这个 computing 呢,它呢,必须,必须,必须 要缓存起来。好,那在 computer 的这个缓存的机制里面,最重要的一个点就是咱数据标记,它的一个属性呢,就是 darting, 那么 darty 呢?它是 watcher 的一个属性啊,它呢是 watcher 的一个属性, 那么它有什么作用呢?也就是说当 dirty 是处的时候,处时,那么我们在读取 compute 的这个值的时候,就会重新计算, t 的值是重新计算,当这个值是 force 的时候,那么读取 compute 的就会使用缓存, 是读取 computed 的知识 会使用缓存好,这是 computer 的,它怎么来控制这个缓存啊?那么第三点呢,就是 他依赖的这个 data 发生改变,我们这个 computed 的他到底是怎么来更新的?也就说他怎么去呃重新进 计算,怎么去使用缓存?依赖 data 发声改变 computed 是如何更新? ok, 这里呢,咱们给它假设一个场景啊,比如说页面 p 中的计算属性 c, 它呢依赖于 date 里的 a, 那么 compute 的更新步骤就是下面这个,咱们来说一下第一步呢,如果说 就是这个 c, 他依赖于了这个 a, 对吧?那么这个 a 呢,他是能够收集到这个计算属性的 water 的,这第一步就是因为 这个 c 呢依赖于 a, 所以 a 可以收集到 c 的什么呢? watcher? 那么第二步呢,就是说当 a 发生变化的时候,会把 watcher 的这个 dirty 呢,给它设置为设置为处,说当 a 发生 改变,那么会把会把 water 的 dirty, 嗯,设置为处好。那么第三步呢,就是它除了要把这个 doubt 设置为处,还会哎,这个 a 呢,还会收集到页面 p 的一个 watcher a 呢,去通知 p 进行更新,从而让页面呢去重新读取这个计算属性,那么这样的话,这个单体是处,所以这个时候呢,他就会去重新计算,也就是 a 呢,还会 还会收集页面 p 的 watch, 同时呢 a 会通知 p 进行跟。 那么呃页面 p 呢,他重新读取计算属性 c, 因为此时的呃 dirty 是处, 所以此时的计算属性要重新计算, ok, 这是第三步, 那么接下来呢, compute 的它更新完毕之后呢,会再把这个 darte 呢设置为 force, 如果说,呃,他依赖的这个 a 不发生改变的话,那么下一次再来读取就会读取这个缓存了。 computed 更新完之后呢,呃,会把这个 dirty 设置成 force, 如果依赖的 a 不发生变化,那么 那么下次就会读取缓存,那么下次 学会读去贯彻这里呢,大家可以看一下旁边这个代码啊,这里呢,咱们就是获取到这个 k, 然后他去改变这个 darty 的值,另外呢,呃,根据这个 darty 的值,根据这个 darty 的值啊,呃,更新这个 water 啊,同时呢还会有一个,这里有小重点,就是我这个 water 是怎么让他们两个联系起来的? ok, 这是呃计算属性 c, 它是怎么让这个 data a 收集页面当中的这个 water 的? 同时呢,去修改这个,就是去判断我的这个计算属性是否呃,要重新计算,或者说要去使用这个缓存。好,那么关于这 computer 的这个原理呢,咱们就说到这里。

我晚上在直播的时候,很多人比较喜欢我的 vs code 的配置,那我现在把我的配置分享给你,然后告诉你怎么样获取。那你下载完这个配置之后,这个我的配置项目包括插件会自动帮你进行下载,你可以在我的配置基础之上进行优化。 那我们我需要一个工具啊,把这个配置呢分享给你,那你也需要这个工具,把我的配置下载下来。安装好这个插件之后的话呢,我们调出命令,你可以按 come 的 shift p, 如果你是 windows 的话,按 ctrl shift p, 那调试好之后的话呢,你可以选择下载配置, 再下载配置这块啊,那我把它给缩小一点,看这块,这个下载公共的,你点击它,点击它,那这时候的话呢,会 弹出个窗体,在这块你输入我分享这个 id, 我会把它放到后盾人 vs 扣的这一块,应该在这块大叔的共享配置,你点开这一块的话呢,这块就有这 id, 因为我把我这个初始化了,一会,这个 id 我可能要更新一下, 你呢?复制我更新之后的 id 贴到这里边就可以了,他会自动就是进行下载。如果你之前登录过啊,你登录过,比如说现在我把它给登录上。 好,这个登录之后啊,我这时候呢,这个时候你登录之后啊,你再点击下载配置的时候,他就是从你自己的账号上进行下载, 那么我们可以怎么做呢?我们可以把那个配置啊给他重置一下,重置扩展设置,重置之后的话呢,就把登录状态给清掉了,这个时候的话呢,你再点击下 配置的时候,就又会有这个界面了,那这块你就可以填我的 id 了。那一般情况下,我的建议是你先把我的配置下载下来, 然后呢,在我的配置基础之上进行优化,是吧?比如说我默认时装 vim 插件,你觉得 vim 插件呢?呃,你不想用,你就可以把 vim 插件从这个插件商店里边把它给卸载掉。 然后呢,你这时候可以使用 vs 扣的织带的这种配置项的管理。这个视频录完之后呢,我会重新更新一下这个 id, 到时候你可以使用这个新的 id 来获取我的配置项。欢迎大家晚上八点来到直播间,感谢大家收看,再见!

今天我们来学习唯有文本渲染,指定是差值表达是 v 杠 test 和 v 杠 h, t, m, l。 上节课呢,我们生成了所有的语句之后,我们去做微调,把内幕改成 context, 再加上指 a, c, s, 再添加一个属性 a 制 对应的指是 h e, 标签当中包含着十八,它的表达是前面输入文字,然后呢,我们再输入一个 p 标签当中,再输入文字,再写上伪造 test 对应的指是 name, 然后呢,我们再写上一个 p 标签中包含的内容是文字,再写上一杠 atm 二对应的是 a 制,保存内置浏览器预览。我们 看到叉车表达是和文字同时显示, v 杠 test 只显示 z s, v 杠 atm l 只显示十八,并且是标题样式的十八。总结,叉车表达是和 v 杠 test 输出的是纯文本 v 杠 test, v 杠 atm 是替换标签当中的。