粉丝1382获赞8394

状态管理啊,首先我们在里面呢是需要添加一个什么啊?可以理解为就是有一个叫 store。 好, 我们先把这个呢给大家先导入进来,这个 store 呢,它的作用是用来干什么的?大家可以理解为我们的这个 store 呢?呃, 其实就是我们的这个 pdf 它的实际化对象。好,你看啊,在这个位置呢,先给大家添加进来 好,完了之后在这个地方你要干的事啊,首先该导出的我们还是要导出,然后呢我在里面,比如说我现在跟大家起的名字叫什么?叫这个 mine store, 这个名字呢,你可以在里面随意的去起。哎,起什么都行啊,但是呢,大家要知道它呢是一个什么,相当于是那个 就是唯一的。哎,我们不能有一样。好,我刚才跟大家写到的名字呢是这个 mine, 对, 再次强调我们里面这个名字呢,它一定要是唯一的啊, 因为我们是可以创建多个仓库的,就像刚才给他画的这个图,这个仓库呢假设是专门用来存储我们家族里面所有的车的。 好,这个仓库呢是专门用来存储所有的房的,这个呢是专门用来存储所有共享钱的,那我现在要把这个钱往里面放啊,你就直接的放在他,那我现在要获取钱,你就从这个里面呢直接的去获取好,包括我们刚才说到的共享车。哎,我这个时候在里面 想要去那个共享里面拿什么,那你就直接的从它里面呢去进行获取,包括比如说他要获取, ok, 都可以的,我们这个时候就可以跨越刚才跟大家说到的这种层级关系了,是不是?好,那我现在跟大家写到这个位置之后, 我们在里面具体要定义什么?第一个呢就是我们的这个叫 i state, 记住啊,有些小伙伴一定要了解 state 里面定义的数据呢,它是一个共享所有组建都可以 访问的数据,那我在这个地方要写到的数据,它很明显是一个什么?是一个箭直对的方式是不是?那我现在在这方要写到的是我们的多页签导航的列表数据信息。 我先在这个地方给大家呢写到了一个空的数组,再次强调一下,他能表达的是我们的多页签导航,哎,这个数据,也就是说我在这个地方给大家添加了一个多页签导航的共享数据,对,这个数据我们已经添加完了, 那我这个数据里面的数据来源从哪个地方来呢?数据的来源,我们在里面如果要改变这个 state 状态的值,它里面呢是拥有一个叫什么叫 action, 哎,如果了解 view x 的 小伙伴都知道我们在 view x 里面拥有 action mutition, 但是在我们的 pdf 里面呢,它是没有,这个没有提醒了,哎,就简化了嘛,是不是这个位置能变得应该说好理解了一些,那我现在在这个地方第一步呢,我要做到的是添加我们的页签导航的数据,哎,一会把这个数据呢给大家传过来, 如果说我调用了这个方法,那么我们的数据是不是要存储在刚才写到的这个,哎,就 type leaf 要存在它里面,是不是?所以说你在这个位置就可以直接的借助我们的这个库型呢,把相关的数据呢给它存进来,明白没有?对,我们可以存, 那我除了存之外,我在这个位置也可以对它进行,比如说删除啊啊,因为我要点删除的时候,我也可以调用它, 如果你想在这个地方把删除写进来,我们一会也可以跟大家写三,这个呢就是我们的状态管理里面你定义的共享数据,以及对我们这个共享数据 添加做的处理。哎,我点一次添加,我们就会把这个数据呢追加在它里面,到时候展示的时候你就展示它就可以了。好,行,这个位置说完了之后,不知道这个写法呢,小伙伴们是否已经 get 到? get 到了之后啊,接下来我们再来给大家看一下, 它又如何在我们的主键里面,比如说导入进来呢?对不对?哎,在我们具体的主键里面我们要把它呢去导入。 好,我刚才跟大家说我们的这个数据呢,不停的往里面去添加。哎,我们先要考虑一点啊,你说我这个地方什么时候在调用我们的数据添加呀?嗯, 问大一个问题,啥时候我们调用这个数据添加啊?我,我把那个数据存进来。好,你看我们再回到这一块,就是我现在已经在公共里面跟大家把这个定义好了,但是我现在面临的问题是,我什么时候把这个数据能给大家存进来? 是不是?我在点击这个导航的时候,就是点击我们的导航菜单的时候,会把这个数据存过来,对不对?大家一定要记得什么时候存,你在里面左边,比如说你点了什么菜单,我们的这个数据就应该存什么, 哎,对,是的啊,点击我们的导航菜单对不对?好,那我现在就要把我们的这个导航菜单要跟大家捞出来,我是不在这个地方给大家写的,哎,先要找到我们的位置啊, 那我什么时候点击完了以后它会存?首先我们肯定是在我们的这个叫无子集的时候去进行,因为你在有子集的时候点击它,实际上并不会去存储有子集里面,说白了就是你点击的时候,我们仅仅只是为了打开我们的下一节。 好,我在这个地方点完了以后,我给大家传入了另外一个我们的 item 呢,我在这一方给大家写了啊,好,写完了以后我就回到我们的这个上面来,来给大家在这个位置呢啊,把我们刚才写到的那个相关参数都给大家呢,直接添加, 我相当于点击了一次这个数据就是我们要存储的相关数据信息。那我现在要在我们的这个 live item 里面对谁进行处理,对我们的 pdf 去处理,所以你在这个位置就不能单纯地只是获取我们相关的参数信息, 我在这个地方就要拿到我们刚才写到的这个 i store, 你 刚才的名字是不是叫什么?哎,这个 mine store, 对 不对?它的来源,它来源于哪里?来给大家寻找一下来源于我们的这个 i store 对 象, 这个呢就是相当于导入我们的这个 i store 对 象,这个呢就是相当于导入我们的 i store 管理呢,给大家导入进来。 好,导入进来了以后,有些小伙伴呢,同样也要记得一点,我们刚才给大家导入进来的时候,它实际上也是属于一个什么 viewhook 的 一个写法,所以在这个位置呢,你可以这样去做啊,好比如说我们从它里面拿到我们具体的数据对象, 那我现在拿到的这个 store 呢?实际上它就是你在里面定义可以拿到我们的 c 的 状态的值,可以拿到我们的添加方法。那我现在在里面一旦点击了以后,我要获取到它的这个添加的方法, 是不是在这个地方就可以直接给大家写了啊?你看刚才我们写的时候里面不是有一个添加的方法吗?好,我们把这个添加的方法呢?哎,直接的给大家这个放入进来, 放入进来以后应该把你刚才写到的这个值,我们以参数的方式呢直接的给大家传过来,对吧?是不是应该这样去进行处理? 好,刚才说到这个位置,有些小伙伴呢,先把这个地方咱们先那个看明白啊,要不然的话一会再跟他点击的时候,有些小伙伴这块会觉得比较晕。哎呦,问到我们的这个 store 从哪里来的?或者说为什么在这方要点击这个方法?这些都是我们在这个 多里面单独定义的,是不是?哎?因为你我要把这个数据点完了以后存,那他的这个数据不就往里面存进来了吗?好,我简单的问一下大家,这块这个意思明白不?就是在我们的导航菜单,你点击的时候,我们要去存储数据啊?存储, 哎,我们的这个导航菜单数据是不是把菜单的数据呢?存储,存储到谁存储到我们的?哎,这个霹雳啊,状态管理里面好点完了以后,我们的这个数据实际上呢他已经存进来了, 但有些小伙伴说,那你这样说,我存进来了以后,我要点击,我发现我点完了以后啥都没有,并没有看到我们这个位置有变化呀,是不是我们点完了以后,对他已经进行了相关存储之后, 接下来我就要在里面拿到我们的这个数据,同时我对它进行显示,我们来看一下是不是能够把这个数据呢给大家展示出来。好,刚才在说的过程中就是咱们的这个存储过程,小伙伴们明白没?明白了之后,现在就要回到我们的 菜单,哎,就是我们当前看到的多一千导航也以同样的方式,刚才跟大家写到的这个是一样的, 先把我们状态这个管理给大家导入进来,然后你在里面比如说要对它进行什么,哎,这个呢,其实说白了就是因为它是一个方形嘛,我们要对它 或哎就是那个 view hook 的 写法,是不是用到它里面的某一个对象?好,我把这个对象现在已经跟大家写好了之后,我们接下来在这个位置给大家看一下, 应该对数据进行循环便利吧,因为他肯定会有多个吗?是不是?好,我在这个位置呢来给大家呢循环便利一次啊,你当前循环便利,我们这个时候循环便利便利的是谁? 是不是我们多里面刚才给大家拿到的来,我把这个数据呢也同样的给大家写一下。这这块呢,有些小伙伴在写的时候一定要记得咱们的这个思路呢,一定要保持清晰的状态,否则一会呢写着写着就不知道到哪个地方去了啊? 好,然后你在里面拿这个值的时候,我们里面呢,实际上它是拥有比如说 url 的 值,对不对?好,这个时候你在里面要获取的这个数据来给大家转下来啊,让你们看的更清晰一些, 我们拿到的相关数据就是它里面的这个名字的值。那有些小伙伴说这个数据是从哪里来的呀?这个地方感觉好晕,我们的数据从哪里来?从这来,我现在跟大家写到的这些是不都从这来? 因为你的数据实际上是我们在每一个 item 点击的时候,把它的这个 item 的 值呢传过来的,所以在这个地方大家写的时候要根据我们刚才的这个数据。 就是说到这一块,大家会发现无论是面包蟹多页签导航,还是我们左边的导航菜单,永远都围绕的是一组数据,这个才是核心关键点, 因为你只有围绕一组数据,数据一遍,我们三个都会发生变化,否则的话你三个完全断篇,我们每一个呢都要去重新写这个,其实啊写成公共意义不大了,对不对?好, 把这个跟它呢,基本上已经写完了,之后我们简单的来看一下它的这个变化。来,我先页面呢,给大家刷新一次,你会发现里面呢什么都没有,那我接下来要点了啊,点击首页, 看到我们的多页签导航,首页出来没点击统计管理,是不是已经有了?财务管理好,订单管理,你看我继续。哎,我们的会员列表,会员详情包括创建管理员,这个时候多页签导航里面是不是可以正常的展示 你点击的是哪一个,他就会显示哪一个了?刚才写到的思路不知道有没有小伙伴有什么不清晰的地方,如果有可以提出来。好,这个位置如果都听懂了的话,咱们可以小一来一波。嗯, 对,刚才在给大家说的过程中啊,如果说我们这个位置都听懂了的小伙伴,你们可以小一回复一下,哎,有问题的小伙伴呢,大家可以提出相关的一些问题, 好,非常棒啊,看到很多小伙伴的这个思路还是跟得上,那像我们平时在写的时候,大家会发现有时候我们在里面要写到什么,哎,多点啥啥啥哎,有些小伙伴呢也会觉得说这个位置呢,比如说我不想这样去写, 我们也可以借助于,比如在这个位置能不能去通过解构的方式,大家一定要记得啊,解构呢,他会让我们的响应式的特性呢消失, 所以在这个位置呢,当然我现在跟大家说到的这个写法,能记住的,小伙伴记啊,毕竟你以后在你的项目里面可能会出现这样的写法,他在这个地方会有一个这个啊,我来给大家添加进来以后呢,简单的说一下, 我们里面有一个叫什么叫 store, 哎,这个 to rest, 哎,把这个呢我跟大家导入进来,它呢来源于我们的这个霹雳啊,那么它的这个作用是用来干什么的?实际上就是担心我们的这个 store 对 象响应式的特性消失了。 大家都知道我们为什么要把这个数据存储在我们的本地存储就是存储在我们的霹雳啊里面,而没有存储在本地存储, 原因就是因为我们的这个批量状态管理,他是响应式的,就是他的数据一旦发生变化,我们实时的双向绑定的,你存在本地存储,他不见得拥有这个特性,所以说我们希望保留他的这个,哎,就是响应式的特性。 但是我又担心,可能有些时候我们的响应式的特性呢,会被突然之间,比如说删除掉了,那你就在它里面呢,把它折腾进来,就是它的这个作用是用来干什么?相当于就是,哎,这个保持我们的响应式这种特性啊,对,记住了,作用。 好,那如果说我非要在这个位置对他进行应用的话,我们在里面怎么样应用呢?你在这个位置可以这样写。哎,我一会跟他把相关的数据能添加,稍微等一下啊,你看我们在这个位置能跟他写, 把我们的这个 store 呢给大家传过来,然后我们在里面拿到的相关数据是谁,就是他这个地方,你就不用写到 store 点什么了。 所以说这两种做法呢,有些小伙伴可以根据情况都行啊。好,我页面刚才给大家刷新了之后,我们再来点击一次,你看是不是最后的结果呢?它是一样的,所以有一些小伙伴可能会在你的项目里面看到我们刚才写到的点什么, 也有可能会看到我们在里面通过结构了之后,然后,哎把它仍然转变为我们响应式的这个写法,两种写法呢,可以掌握其中的一种就可行。好,我不知道这个位置在给大家写的过程中,大家是否明白啊?这些也是我们在平时开发的过程中挺容易见到的。 好,那把这个写完了以后,我们刚才说的这个数据不就已经可以了吗?但是这个数据他现在面临以下问题,第一,我页面刷新的时候他就没了。 第二,我们里面刚才说到的关闭呀?是不是?哎?包括我当前点击了谁,万一要是有重复的,你会发现我们在里面会重复的出现,是不是?你看到没有?现在我点首页,我在里面无聊,我多点了几个,你看我们的首页他就会不停的出现, 那像这些问题咱们又怎么解决?所以并不像有些小伙伴觉得说多一千导航点一个,添加一个咱就完事,多一千导航里面的细节非常非常的多啊。好,所以我们继续来跟大家看一下它里面的一些细节处理。

来到和前端小组一起学 real 三元码,本章节我们将讲解属性系统。属性系统看起来非常简单,但实则暗藏玄机, 它里面有处理有一些核心的问题,比如说 class 应该使用 class name 还是 set attribute style? 如何高效地 def this able? 是 设置 dom 属性还是 html 属性? 为什么表达元素需要双重设置?这些问题的答案都会在章节中进行得到详细的解析。 在上一章节我们看到的 render options, 它是由 not apply patch proper 去两部分去组成的,而其中 patch proper 是 负责属性的设置与更新,当 view 需要去更新一个元素的 class style 事件或者其他属性时,都会调用 patch proper。 而这一章节我们就将沿着 patch proper 的 分发路径去从先盼什么后盼什么入手, 把属性系统的关键决策点去逐个拆解。而 patch proper 是 属性处理的路口,它根据函数名的特征,将处理分发给不同的专门的函数,其中我们就可以看到它这里是去 patch style patch class, 然后去处理一个 event 以及对应的一个表单元素的设置,这也是它对应的一个 tag 和 custom element 的 特殊处理。以及最后是一个 patchdom 的 proper。 屏幕看起来就代码有点少, 所以看的不是很清楚,但是没有关系。在接下来章节中,在接下来章节中,我们将会一一去解析这些函数。 patch proper 的 分发顺序是非常有讲究的 啊,比如说它首先对一个 class 是 最常用的属性,它是会优先处理,而 style 第二常用,它需要特殊的 def 逻辑,而对于事件就是 on, 是 以 on 开头的属性去交给事件系统。而对于 dom 属性和 html 属性,它会根据 should setup as proper 去进行一个判断。这里有个值得非常提前记住的点,就事件分支算在 purpose, 你只是转发给了 patchevent, 但它背后决定了事件更新的性能上线就为什么要保存 in worker, 为什么我们尽量避免 频繁的 a, d, d 和 remove。 而这一块我们先按下不表,后面一个章节会将门进行展开。这个模板是支持点 proper 和 auto 修饰符去强制指定属性的设置方式。大家可以看到它是会有这两种修饰符, 而编辑器会将这些修饰符保留在属性名中去运行,通过检手手字母来去进行一个识别。大家可以看到它是运行时通过检查手字母来去识别。 而这里是巧妙地运用了一个表逗号的一个表达式,就比如说是这 key, key 等于 key 的 status 一, 就先去掉修饰符前缀,再返回布尔值去决定走了哪个分支。我们了解了修饰符的处理逻辑,现在我们来进入一个高频分支,就是 class 的 处理。 class 绑定是 view 中最常用的动态绑定之一,而 view 它其实是支持三种绑定方式,就在 templar 上是有冒号 class 自创一个是还有包括一个对象,甚至包括一个数值。就无论是哪种方式,最终都会被规范化为可直接应用到 dom 的 形态。就 模板编辑阶段,会尽量把 class 归一化,运行时也会在需要时去做兜底。例如在 n 的 函数中去闯入一个对象簇时会走 normalize class, 因此 patch class 接受的 value 通常是就是最终的 class 字母串。大家可以看到这就是一个 patch class 的 一个最终处理方式, 它这里有几个关,非常关键的点就是过度 class 的 合并,就是这里有个处理过度动画的临时 class, 当元素处于过度动画时, transition 组间会在元素上去添加这些临时的 class, 比如说 to interactive 这些 class 去存储在 adder, 会存储在 adder await 信息 key 中,而 patch class 需要将它们与用户绑定的 class 合并。第二个就是 classname 和 set attribute, 这对于普通的 html 元素中,它就直接去设置 e l 点, classname 比 set attribute class value 会更快,但 sv 机必须使用 set attribute, 所以 它这里有个判断,就是 is sv 机它会去通过 set attribute 形式来去 做。同时大家可以看到为什么不用 classlist, 就是 通过 classlist 的 a, d 和 remove 需要足够去操作 a class name 可以 去一次性设置整个 class 的 字母创,就当 class 变化较大时去直接赋能会更加的高效。理解了 class 的 整创 替换之后,再去看 style 的 就会发现它的复杂点就来自两个点,一个是它贴呢,是箭指队的集合,第二个就是它还承载了 will, 杠, show 等行为层面的协助需求。因此 patch style 的 核心不只是设置,而是以最小代价去维护一致 style 的 绑定比 class 复杂的多,它支持字幕创和对象两种方式,需要处理 class cs 变量,浏览器前缀或者 unimportant 的 等特殊的情况。 大家可以看到这样子的一个方式,呃,这就是一个 patch style 的 一个智能 def。 首先它对于一个对象形式的时候,它是需要去做一个 def, 就是 旧址也是对象,它会去移除不再存在的属性,而旧址是函数创,它会是解析后去移除不再需要存在的属性, 然后它就会去设置一个新的属性,最后它就是去做一些函数,向量等等。这样的方式是 style 的 def 的 算法, 它其实是采用两步的形式,就当新旧值都是对象的时候,它会去一首先去移除旧属性,就避利旧对象,如果某个属性在新对象中不存在,将其设置为空字母串。第二步就设置新属性,去便利一个新对象去设置所有的属性。而这种算法的时间复杂度是 o m 加 n, 其中 m 和 n 分 别是新旧对象的一个属性的数量,其中 set style 它就是属性设置的一个细节点。首先如果是以宿主形式的,它就会依次地设置去用于 cs 回退值。 其次,如果是使用 cs 变量的话,它是必须要通过啊 set property, 如果它是 important 的 话,它也是必须要通过 set property 去做处理的。 大家刚看到这个 set style 的 一个特殊处理,其实它这里面是有两个,一个是 cs 变量,那 cs 变量它是怎么去做识别呢?就是以杠杠开头的属性是 cs 自定义属性值必须要使使用 set property 来设置,不能直接复制而杠。而 important 的 值也是必须使用 set property, 并将 杠 important 作为第三个参数去做传录。同时数对于数值值的 style 值用于 cs 回退来进行处理啊。请注意它这里有个非常点,就是 autprefix, 刚刚我们看到它会进行一个自动添加浏览器前缀, 那它是怎么做的呢?它首先 prefix 会检测浏览器是否支持某个 cs 路径,如果不支持,那它就会去尝试添加 web webkit mode ms 前缀,它的结果会被缓存去避免去重复的检测。而请需要注意的是, freet 属性会被特殊处理,即使浏览器支持无前缀的 freet 也会去做尝试添加前缀,这是因为某些旧版本的浏览器的 freeet 行为不一致。除了浏览器前缀之外, patch style 还出需要去处理一个非常重要的一个协助, 那就是指定就 vga show。 当元素存在冒 style 动态 style 和绑定和 vga show 的 时候,如果 style 动态 style 设置 display, vga show 显示时应该恢复。这时如果 vga show 隐藏元素 display now 应该覆盖 vga style 这样子一个值。 而这是怎么去实现的?那这是去通过 visual origin display 和 visual hand 这两个标记去做一个实现的。大家可以看到,在这里 visual 的 时候,它去做一个,两个标记去做一个实现。 到这里我们就已经分别看完了 class 和 style 两种最常见的快度镜。接下来进入到一个更加通用,也更加容易踩坑的部分,就同一个键,到底是应该写在到米属性里面,还是写在 html 属性里面呢?而这个就是我们的 should set as proper 该设置哪一个? 需要注意的是, html 元素的属性有两种设置方式,一种是 dom 属性, proper 就是 l 点 value 等于 hero。 还有另外一种是 html 属性,就是 attribute, 就 l 点 set attribute variable 对 应的一个 value 值,大部分 情况两者项目相同,但某些元素属性必须使用特定的方式,而 should set as proper 去决定哪应该去使用哪种,大家一看到它就是对应我们的一个具体的方式,而 should set as proper 去决定哪应该去使用哪种,大家一看到它就是对应的方式,而 should set as proper 就 分为两段。 首先我们来进行一个一对一的讲解,对于 svg 来说, svg 元素大多数属性都必须使用 set attribute, 而对于布尔类型的属性,就比如说 spell, trick, dragon label, a translator creator, 它必须使用 set attribute, 而 i framed setbox 必须使用 attribute, 而 form 属性只读必须使用 set attribute, 而 input 点 list 也是必须使用 set attribute。 test tab 也是使用 set attribute, 而媒体元素,比如说 the west hat 必须使用 set attribute, 那 同时原声事件的再加字母串值也必须使用 attribute。 最有什么呢?如果是盗门属性就用是盗门属性,而刚刚那些只是错掉一看。现在我们来对这些特殊的属性来进行一个讲解。 首先第一个就是每每举值的一个不二属性,像 spin, trick, joy, able, trace, state, out, current 这些属性的到某属性必须是不二值,但 h, t, m, l 属性是每举字母串就 to 和 force 它是一个字母串,那如果是使用到某属性去设置成一个字母串的话,那么会被转为成一个 自创 force 会被转为 true 啊 true 化,所以必须使用 set attribute。 同时 fm 的 sendbox 这个属性去控制 fm 的 安全属性就设置,如果你设置到我们属性为 null, 就 会变成自创 null, 而设置成空自创会使用最严格的杀伤模式,而只有通过 set attribute 和 ensure attribute 才能够正确的处理。下一个就是 input 点 list, input 的 list 它是只关联一个 data data list 属性,而到某属性 a r 点 list 是 只读的返回关联的 data list 是 不能直接复制的,而 form 元素里面 表单元素的 form 属性也是只读的去返回索取的 form 元素,所以这些属性不能直接复制,必须使用 set attribute。 对于一些媒体元素的 words 和 size。 什么是媒体元素?就是 image, video, canvas 和 source 点框高,必须使用 attribute 的 设置。盗墓属性的设置可能是不生效的, 就盗墓属性设置行为不一致而 show set as proper 的 本质是什么?本质是在为后续的两条分支选路。 走到某属性分支意味着更加贴近浏览器对象模型,可能带来类型转换与指读限制。而走 attribute 分 支则更加贴近序列表的 html 表达,就更容易与表单重置,第三方读取逻辑对齐。先把这个选择记住,再看两边的具体时间就比较清晰了。 所以我们来看一下到母属性的设置,就是当 should set as proper 返回 true 时,用 patch down proper 去设置到母属性。大家来看到这是一个 inner html 和 test content 的 一个设置,而下面就是一个 value 属性的特殊处理,对应的这是 这是一些空值处理,以及布尔值就是空字副状场为刚呢,就是我们所看到的一个 value 属性的一个特殊处理, 请注意 value 是 最复杂的盗木属性,因为什么它首先它具有一个比较优化,就只有当新旧值不同时才会去设置,避免不必要的盗木操作。同时 option 处理特殊处理, option 的 value 属性如果没有设置的话会回退到其文本内容,所以是比较时要用 get attribute value 而不是 array value。 同时 check box 的 默认值是 on 而不是空字不串,同时它还会去存储原始值, 非字母串值会被 dom 转为字母串,而 will 会将原始值存在 a r 点杠 value 中去共 v 杠 model 去做实体。 而在上一步我们看到中去设置 in the html 表中, will 会去使用 on serve to transfer html 表包装值去以支持 trusted types 安全策略。而正在上一章章我们就建 已经介绍过了,所以在此我们就不再去追溯了。看完到我们属性的设置,我们来再看看 htm 表的是如何去做处理的,就当 should set as proper 去访问 force 的 时候,我们会去通过 patch or true 来去设置 htm 表属性。首先啊,这是 svg 叉 link 的 命名空间 去做,对那个处理危机中的某些属性必须要叉 link 秘密空间,就比如说啊叉 link, 杠 herf 这些属性必须使用 set attribute n s 设置 set attribute n s 而对于而对于布尔值处理的话, 首先需要注意的是,它存在即表示 true, 不 存在表示 false。 设置值 true 或者空字不算,就是 set attribute key 等于冒号,而 false 或者 null 的 时候属于 null。 attribute key 需要注意它是 including or true 函数,判断一个值是否应该包含不小于属性,而这两种方法需要注意,我们这两种方法的写法是等价的, 走路到 patch or true 这里时,已经覆盖了绝大多数使用需要写入 attribute 的 场景。普通键值,叉令、可秘密空间以及不小于 unk 属性,这是有或者无极帧的特殊语义。但 patch proper 还有一种 不适合直接缩略为字母串的例外,就比如说 real element 需要把复杂值当做属性传递, real 跟 model 相关的 true force value 也需要额外的存储,这就是 real 的 custom element 特殊处理。就当元素是 real 定义的 custom element 的 时候,属性处理是有特殊的逻辑的。在这里我们可以看到 custom element 是 通过 its view c e 标识去识别,对于这些元素包含,它会去做这样子处理,就是包含大写字母的属性值会被转为驼峰形式,非字母串的值会作为盗门属性设置,而不是缩列为字不串。 这使得 view 组键可以通过 custom element 去接收复杂的 purpose 值。而除了 custom element, view 杠 model 在 script 上的真自定义真假值也需要特殊的存储。 在这里我们可以看到六杠 model 在 支持自定义的真假值,这也是通过 achieve variable 等于 yes, force 等于杠 value。 这些值并不是标准的 html 属性,不能通过 set attribute 设置 will 将它们存储在原数的自定义属性上。去 这里我们就可以看到了,它是通过啊 r 点杠去 value elegant 点杠 force value 去存储在元素的自定义属性上。 view 杠 model 指定会在处理 check box 上自动去读取这些值,哎,最后我们来看看表单元素为什么需要特殊的双重设置策略。对于 value, 去 tricked, selected 这三个属性 view, 它会去同时设置 dom 属性。 html 属性为什么需要双龙设置呢?这是因为表达了重置,比如说 input type and reset 会将表达元素重置为 html 属性值,同时为了去做一些第三方库的一个接龙,就比如说某些库或者浏览器扩展 可能会去读取 html 属性,而不是 dom 属性。注意,需要注意的是, custom element 标签名包含杠会被排除在外。最后我们再看一个属性处理流程图。 首先,对于一个 patch proper, 它会去读它的 key, key 是 什么?就是它对应的是 class style, on 还是其他的,那对于 class, 它会进行 patch class 对 于 style, 它会进行 patch style。 对 于 on, 是 v 杠 model 兼容器,它会去做。 如果是否他会去做一个 patch event, 而 patch event 将会是我们下节章节的重点,而如果是的话,请跳过。对于检查修饰符,如果是点 proper, 如果是 attribute, 如果是无修饰符,去分别的去对应它进行下一步的操作。对啊,屏幕有点小,可能看不全。 如果将它当成一个流水线来看,前半段主要负责高频而确定的快捷操作,而后半段主要是负责低频但必须正确的边界接龙,而事件系统 则是一个被单独隔离的出来的高频模块。而下一章我们会去看它为什么需要这样设计,那我们来看一下本章节的一个小结。 patch proper 是 real 属性的核心,它根据属性类型将处理分发给专门的函数 a patch class, 利用 class name 直接复制实现高效的更新。 a patch style 它会去通过智能的 def 去避免不必要的到幕操作。 a should set as proper 会去处理到幕属性与 html 的 复杂边界情况。这套系统体现了 view 对 性能的极致追求,能用盗门属性就不用 set attribute, 能直接赋值就不用 casteist。 同时它还处理了大量的边界情况,确保在各种场景都能够正常工作。下面我来回看一下本章节的深入思考。 首先,一为什么 input list 等于 data list 杠低,必须使用 set attribute 而不能用 dom 属性呢?如果强制使用 dom 会发生什么问题?二就是 patch style 的 diff 算法在什么情况下效率最高,在什么情况下效率最低呢?有没有什么优化的空间? 第三点就是 should set as proper 中为什么 fframe 的 data box 属性需要特殊处理?第四个是为什么 will 为什么要在表单元素上去同时设置 dom 属性和 html 属性呢?好的,我们本章节就到此结束了,欢迎大家点阅、点赞、订阅以及分享我的频道,我们下期节目再见!

ps 四四折腾版 ps 四十三点零零与 ue 折腾教程那么上一期的视频我给大家介绍了,如果你的 ps 四已经可以折腾了,就是在十二点五二以下的版本,我们不管是用 u 盘折腾,还是网站折腾, 还是玩科云全能折腾器, esp 三二还是光盘折腾,我们都是已经可以折腾的机器,如何改用 ue 来折腾的教程, 当然这就是给大家提供了多一个的折腾方法。那么今天我说的第二种情况就是,如果你的机器是十三点零零,它不能够使用其他的折腾方法,那么只能使用 ve 的 折腾方案,那该如何进行操作?那么目前对十三点零零的机器, ve 是 它唯一的折腾方案啊,十三点零零以上目前是没有办法折腾的, 那么你正巧是十三点零零,那么我们就可以使用这个 v u e 来折腾它,当然这个方案也可以支持到七点零零到十三点零零的其他版本。首先这个方案呢,意味着你的机器原来里面的所有游戏,包括你的游戏的账号存档全部会丢失, 所以在使用这个方案之前,你要确认你已经愿意放弃你之前所有的游戏数据。当然以后如果回到正版,你的账号和存档还是可以用的,那么如果你之前下过数字版,那么这些游戏是不能再用了,包括存档。那如果你是有光盘版的游戏呢?折腾之后呢,还是可以用光盘版再来安装一遍,仍然是可以进行游戏的, 只是存档没有了。所以我们在折腾之前要有这样的个心理准备啊。那总结一下,十三点零零的版本只能用今天这一期的 vue 方案,而七点零零到十二点五二的可以用,上一期我给大家介绍的就是其他折腾方案,改成 vue 的 折腾,那它可以保留你原来折腾中的所有的游戏和存档。 好,那么接下来我就给大家具体操作一下。首先我们准备一个 u 盘,将它格式化成 exfit 格式, 然后把我提供的这个 v u e 的 补丁包拖到我们的 u 盘中,同时把这个配乐的点宾这个文件也拖到我们这个 u 盘中,这个配乐的宾就是我们最新的 good bye。 那 么这两个文件拖过来之后呢,我们就把这个 u 盘拔下来啊,插到我们的 ps 四主机上,你现在来到我们的 ps 四主机,进入设定中的系统,在这边选择备份或还原 点,进来之后呢,我们这边使用的是还原 ps 四,那么在这里呢,我们就看到它让你选择还原的数据,也就是我们刚才拷到 u 盘上的这些数据。好,接下去就是确定是系统就开始还原了,这个时候我们就耐心等待它还原数据, 那还原结束之后呢,它就会提示你让你按 ps 四手柄上的 ps 键,我们按下 ps 键之后呢,就可以选择我们的用户了,这个时候我们就可以看见它多了一个 vue user 这样一个用户,我们就使用这个用户来登录我们的 ps 四,而进到系统首页,我们就看到现在这个 vue 应用已经存在了。好,那么我们先不去管它,先进到设定,把我们的语言恢复成中文, 在设定中选择 language 就是 语言第一个选项啊,拖到 简体中文确认之后呢,我们的系统呢就会恢复到简体中文状态。好,那么我们继续进入设定,在这里自动下载, 进去之后这三个钩要把它去掉啊,防止系统自动下载,这个已经是常规操作了啊,大家都知道的。然后这里是重点,一定要把你的网络的外网,也就是连接到互联网的这个网线暂时先拔掉, 防止你的 ps。 四,连接到互联网,注意这一步很重要啊,因为如果你连在互联网上,你的 v o e 可能会自动下载更新版本,那我们这个 v o e 的 折腾就没有用。把网线拔掉之后,我们进到设定中的网络,这边连接互联网,打上勾 进入设定互联网,那在这边我们就可以连我们家里的 wifi, 这边选择定制,连上我们家庭的 wifi, 在这里选择自动不设定 dns 的 设定,一定要使用手动, 在这里我们设置一个首选 dns, 注意看一下这个 ip 地址,一定要跟着我的视频上的 ip 地址完全一致, 设置好之后我们继续自动不使用,设置完了之后,我们返回查看一下连接状态,这个时候如果我们的 ip 地址已经可以获得了,并且我们的首选 dns 跟刚才设置的一样,就说明我们的网络设置好了。好返回首页,这时我们开始运行 vue 的 这个应用程序, 注意应用程序是使用大叉来确定的,进来以后呢,它会有一个提示,直接大叉确定 好,他就会进到我们的 vue 折腾界面。这个时候呢,通常我们不需要设置任何的内容,直接是点第一个 越狱系统就会执行越狱程序,那他会显示一个画面啊,首先上面有一句红颜色的英文,然后有一个向下的大拇指,那就表示这次他的 vue 折腾失败了,那么如果出现失败的话,我们就重启我们的 ps 四再来一遍啊,进到 vue 还是刚才 这种界面,然后直接点预好,当我们出现这个绿颜色的字,并且有一个大拇指向上的姿势的时候,那就表示我们这次折腾成功。那我们只要返回首页,我们就会看到,哎,这个 go 的 图标又出来,然后进了系统,我们也可以看到最新 go 的 版本, 这样我们整个折腾就完成了。那为了测试一下它的稳定性啊,我就是反复重启以后使用我们的 voe 来折腾,那按照我的经验就是前几趟可能确实会出现这种失败的,可能甚至会出现死机和重启的问题, 那随着你的不断折腾,它的 voe 的 成功率会越来越高。那我到后期呢,基本上已经非常顺了啊,基本上就是五次里面大概有一次会失败 啊,他的成功率还是相当高的。那么只要你的 voe 折腾成功一次,今后呢,你的外网仍然是可以连上去的,也就说以后再连着外网用 voe 也没有问题。但是我个人的建议呢,还是尽量不要连到外网去,因为可能会出现系统自动下载更新你的固件的问题。 好,这就是我们十三点零零系统在不能使用其他方式的情况下,如何去折腾我们的 ve。 那 么这两期我都给大家介绍了关于如何使用 ve 来折腾我们 ps 四的方案, 那么上一期讲的是你原来已经可以折腾了,那么改成 ve 怎么去折腾的方案?今天讲的是重置系统使用 ve 的 方案,因为目前十三点零零是没有办法用其他方法去折腾的啊,所以你只能用今天的方案。 视频中相对应的工具和软件都可以到我的主页粉丝群,我是无偿分享给大家的。好,那么今天视频就到这里,我是老王韩语,喜欢我的视频点赞关注,我们下期再见!

real 团队成员 and 酷又一神作,它就是 real skills 集合,它可以让 ai 输出的代码更贴近 real 社区的习惯,让 ai 按正确方式写 real 代码使用也特别简单,直接在项目里面安装 and few skills, 然后选择你使用到的寄宿站, 再选择你的 ai 编辑器就可以了。我本地测试了下,安装 enterprise skills 生成的微代码,质量和完成度确实变高了,可以让我们在 web coding 时更加得心应手,感兴趣的可以试试关注我,了解更多最新资讯和实用技术。

刚刚面试了一个四年前端,简历上写着精通 v o s 开发。我问用户打开一个 v o i 应用,从始化到销毁,中间经历了哪些阶段?每个阶段适合做什么?他回答, before creator creator before mount mounted before updated updated before unmount unmount。 我 追问具体每个阶段能访问什么? d o m 在 哪个阶段可用,亦不请求应该在哪个阶段发。服务端渲染时哪些钩子不执行? keep alive 组建多了什么钩子?组合式 api 里这些钩子怎么用?它开始背钩子名称, 但分不清时机和用途。很多四年的开发者只知道生命周期勾子的名字,却不理解每个阶段的执行时机和最佳实践。面试到此结束,了解的还是不够多,这其实是一个很多中级前端都会踩到的坑。如果这道题目你也不会回答的话,我整理了让大厂 hr 沉默的必考题库, 包含 v o 灵魂拷问、 react 高频陷阱、 js 十连问、点个赞,评论区甩六六六,打包带走 nice, 系统性的掌握 v o 三、生命周期需要打赢这四场战役。第一战役,出土化阶段,组建诞生 before create 特点,实力出土化完毕,但数据观测、事件配置还未开始,能访问,无 实战价值,极少使用可用于插件开发时的特殊逻辑组合式 api 对 应,没有直接对应 script step 默认在 step 阶段 created 特点,数据观测属性方法计算属性已完成,但 d o m 未生成,能访问 data props computed methods, 不能访问 d o m 元素 a l e。 实战价值,发起异步,请求驶驶化,非响应式数据监听事件。注意,服务端渲染时也会执行,避免操作。浏览器 api 组合式 api 中的对应 type 的 函数本身就是这些阶段的整合 执行时机。 before crease 之前可以访问 props, 但还没有 dis。 第二战役挂载阶段, d o m。 登场 before mount 特点,模板编印完成,即将首次渲染到 d o m。 能访问模板已编印但尚未插入 d o m。 实战价值,极少使用最后一次修改数据的机会。注意,服务端渲染不执行。 mounted 特点,组建挂载完成 d o m。 已生成能访问 d o m 元素 e l。 子组件实战价值,操作 d o m。 第三方库出尺画图表渲染,访问或修改子组件, 添加事件监听 resize scroll 发起依赖 d o m。 的 异步请求。注意,不能保证所有子组件都已挂载,用 next tick 或嵌套 mounted。 组合式 e p i unmounted。 第三战役更新阶段,变化响应 before update 特点,数据变化后, dom 更新前能访问最新的数据。旧的 dom。 实战价值,在 dom 更新前获取旧状态,手动移除或修改即将变化的内容,避免频繁更新的优化。注意,避免在此阶段修改数据。 updated 特点,数据变化导致 dom 重新渲染完成,能访问最新的数据和 dom 实战价值,依赖 d o m。 更新的操作,监听数据变化后的副作用坑点,不要在 update 的 中修改数据,每次数据变化都会触发。注意性能,组合式 api un updated 性能优化, 避免不必要的更新。 vmail should updated 批量更新多次数据修改合并为一次更新。第四战役销毁阶段,组建谢幕 before unmount 特点,组建即将销毁,但还完全可用,能访问所有数据。方法 d o m 实战价值清理定时器,取消网络请求,移除事件监听,保存临时状态到上层或存储 vo 二中叫 before destroy amount 特点,组建已销毁所有指令,解绑事件监听,移除能访问,已无法访问。组建实力,实战价值最终清理通知, 副组建或局建立实战价值最终清理通知副组建或局建立。实战价值最终清理通知副组建或局建立。实战价值最终清理通知,副组建或局建立。实战价值最终清理通知。 api on amount keep alive 专属钩子 unactivator 组建被激活 undactivator 组建被缓存 场景标签页切换时保持状态,列表页返回时恢复滚动位置。实战案例,复杂表格页的生命周期设计需求,表格页需要初步加载数据,监听窗口 reset, 调整表格列宽,定时刷新数据离开时清理。 设计 created, 发起出示数据请求 mounted, 注册 resize 事件监听驶驶化表格 d o m 操作 before update 表格数据变化前记录当前滚动位置。 updated, 数据加载完成后恢复滚动位置 unactivated, 重新注册 resize 监听 auto captured 捕获子组建错误降级显示或上报。这个就叫专业。 这道题考察的是对 v o i 组建生命周期的深刻理解,以及在不同阶段做出正确操作的能力,是四年前端写出高质量无坑代码的基石。最后,你遇到过生命周期使用不当导致的 bug 吗?是怎么发现和解决的?

大家好,这里是和前端小组一起学 view 三原码系列课程。本章节将讲解 dom 系统的第一章, runtime dom 设计。 view 它其实是一个响异式的一个 ui 框架,开发者描述界面应该是什么? view 负责将这个描述变成真实的 dom, 但是 real 它其实并不仅仅只是一个限于浏览器渲染,它希望能运行在任何的平台。这就引起了一个核心的架构设计,就是渲染什么和如何渲染进行一个分离, 而其中渲染什么就是 runtime core 和如何渲染就是 runtime dom。 runtime core 就是 定义的 diff 算法以及组建生命周期以及通用逻辑等等。而 runtime library 它其实是定义的 dom 操作事件绑定, 这就是浏览器特有的一些行为。这种分离带来了非常巨大的一个灵活性,就是同样的 run time query, 配合不同的平台,实现可以渲染到浏览器的 dom canvas, 原生移动端甚至是终端平台。 而本章节我们将聚焦于浏览器平台,看看 run time dom 是 如何将 view 的 抽象渲染能力落地到一个真实的一个 dom 的。 每个 view 的 应用都从 create a p p 开始,这也就是我们日常最常见的一个 api。 那 么 create a p p 变后代码到底发生了什么啊?我们可以看一下它这个原代码的一个实践。在这一中我们需要注意的是 app 它里面它调用的 ensure, 它是什么?它是它。其实 ensure 它保证了渲染器只创建一次,并且它是一个惰性创建的过程。对,在这它是一个惰性创建的一个过程,只会去创建一次,然后它会返回一个 app, 并且它还会去将 mount 给重写的,就 app 的 mount 好 像是给重写的,它里面去增加了一个容器解析,就 memorize 清空容器,做一些数据属性的一些标题,去做了一些这样子的一个动作。这就是个 create app, 它内部的具体的一个实现。为什么它是要通过 ensure 这个函数去做处理呢?它是它采用的惰性触式化渲染器,只在第一次调用 create app 的 时候创建,它主要是为了一些 tree shopping 就是 如果用户只使用响应式的 api 而不需要渲染层, 那么渲染器代码可以被完全的移除,大幅度的减小了包的一个体积。又提供了两个创建应用的函数,一个是刚刚我们提到的 create app, 一个是 create ssr app。 二者的区别其实非常简单,就 create a p p 使用 ensure render, 它挂载是清空容器, hydrating 就是 force a create a p p 就是 使用 ensure hydration render, 就 保留保留的容器内容,就是附用 h t m 的 hydrating 就是 true。 在 之前我们提到的 normalize container 就是 容器解析, 在这里它其实它 mesh container, 它支持自创选择器 dom element shadowroot, 同时这的 result resultroot name space, 它是会自动地去识别 svg 和 mass massmail, 去确保紫元素在创建时使用的正确的。 create element name space 这里我们需要注意的是,这个 memorize container 自动选择器就是我们最常见的方法,就是井号 a p p 会使用 document script 去查找元素,而 element 是 什么就直接传到 dom 元素,比如说 document 点 get element 百 id a p p, 然后 shared root 是 什么?就是支持挂载到 shared dom 中,而这对于 web browsers 是 非常重要的。 o p s note o p s。 是 run time dom 的 核心,它封装了所有底层的 dom 的 操作,大家可以看到它其实它这边暴露了非常多的一个呃 dom 的 一些方法。 insert remove create element test set element test parent node nest parent data 它其实它只是对一个 dom 的 一个 api 进行一个二次的封装,去结合 view 的 一些内部属性,为什么要去封装它们呢? 这是为了去做一些跨平台的一个抽象能力以及命名空间的处理,还有特殊元素的处理。在这里我们可以看到它其实内部,它 其实内部它去做了一些将平台无关的 carry 逻辑与平台特定的 dom 进行操作。就渲染器它需要两类操作,就是 node op 就是 元素级别的侦查改杀 patch proper 就是 元属性级别的更新,而这两者进行一个有机的一个结合,去将平台无光源 query 逻辑与平台 dom 的 dom 操作去 结合,而这里就是通过 instant 去传递给 query 的。 create render run time query, 它其实根本不关心节点是 dom element 还是 canvas 对 象,它只调用住读的 note a p s 接口, 就是 render, 就是 渲染层,它其实是 core 加 node ops, 而对于 dom 就是 浏览器来说, node ops 其实就是 runtime core runtime dom 在 刚刚我们可以看到 我们是有一些特殊的一些 dom 的 一些操作,那其中这里面会有个非常重要的性能,就是我们性能优化。我们面试中经常问到的就是编辑器,它会识识别模板中的静态内容,就是我我们之前他在编辑器中提到的静态提升的一个作用, 它其实它会去将它们提升为自常量。自创首次渲染就是解析 html, 自创 tabloud 缓存命中的时候,就是后续渲染就直接会刻入 node, 就 大幅度提升了大量静态内容上的性能。 需要特别提到一点, destet types 就 安全策略,而这个一点我们会将下一个章节会着重去讲。现在的浏览器,它其实支持 trace trishtypes, 这是一种防止叉 s s 攻击的安全机制,它要求所有处理 in the html 的 值都必须经过性能处理。在这里我们可以看到 view 它其实做了什么,它其实它是输出 web, 就是 如果浏览器支持的话,它其实去创建那个一个名为 view 的 trishtype 策略。 当设置 in the html 的 时候,通过 serve to trishtype 来去包装值,这里这里返回的 create html 实现 是简单的,返回的原值就是 real, 它其实是假设传输的内容是可信的,就是来自编曲生成的静态内容。如果 c s p 策略不允许创建重复的策略名,它会去捕获到错误,并在开发中去反警告。 real 三中对 reference 它其实有非常友好的支持度,就 define custom element, 可以 将 real 组建转换为文原生的 cost element。 大家可以看到在这个章节中就 it's cost element, 它其实就定义的就是 如果当在 view 中使用第三方 costemaster, 需要配置编辑器,告诉 view 知识原生标签不需要尝试解析成一个 view 的 组建,而这里它有个非常,而这个就是一个缩减器创建 流程的一个核心,那个逻辑就是 create a p p in sharer 不 存在就可以的去注入 node o p s a patch, purpose 等等,然后包括它的 a p p 重写, mount, mount normalized container, 清孔笼器,执行挂载等等的操作。 time dom, 它是位于浏览器 dom 之间的一个桥梁,它通过 node o p s 封装底层的 dom 操作,通过 patch proper 去处理属性更新,将这家平台的相关实现注入到了 runtime core 的 通用渲染器中, 并且它 create a p p 的 延迟模式对程序员非常友好。这些分层的设计其实是使得 feel 具有了跨平台能力,同时在浏览器平台上保持了高效的盗木操作。而下一章节,我们将深入地去做 hash proper, 去看 cast trace 是 如何被高效地进行更新的。 那我们有些思考题就是用什么 create a p p 设计成以延迟创建缓存机制,它是何时失效的 close shared route 的 问题。 好的,那本次节目就我们到此结束了。好的,本期内容就到此结束了啊,欢迎大家订阅分享以及关注我的频道,我们下期节目再见,我是前头小猪。

小伙伴们大家好,欢迎和我一起学习前端开发。上一节我们知道了 mind 点 js 文件它的一个作用,那么接下来呢,咱们再来看一下这个 app 点 view 哎,这个文件 好,它的作用又是什么呢?我们打开这个 app 点 view 啊,它呢是 view 应用的根主键欸,整个应用的入口点和布局容器,那么这个主键呢,它是包含了整个应用的主要结构和功能。 我们打开了这个主键啊,可以看到它是由三部分组成的哎,第一个呢,可以看到 script, 然后这个 template 和这个 style, 对 不对?它是由三部分组成的,分别哎,又有什么样的作用呢 啊?我们首先来看一下这个 template 啊,它是用于定义这个应用的主要结构和功能。 我们项目当中的这个布局结构啊,比如咱们的这个项目当中,它包含了有标题,有导航,有主体内容,哎,它的一个基础的布局,我们是不是可以在里面来进行,就是在这个 template 当中来定义整个的布局结构, 那么可以使用什么呢?可以使用我们常用的这个 h t m 的 标签啊,比如这个哎 iv, 或者说我们在这个里面呢,我们可以定一个哎图片 等等等等,哎,都是可以的啊,先使用这个全秒标签,比如我这个地方定了一个 diy 啊,这是一个 diy, 好, 你看我保存 来进入到我们的这个哎项目当中,预览可以看到这是一个 diy, 是 不是就显示出来了,所以整个哎它的一个布局结构啊,我们可以在里面的 template 当中来定义 好,我不知道大家有没有有疑问的啊,为什么我们定义了一个内容以后,哎,这个 diy 它是一个水平居中,垂直居中对齐的呢? 问题出现在哪,哎,在咱们的这个 man 点 gs 文件当中,还记得吗?我们是不是引入了一个全局的样式, 引入了全局的样式,你看啊,我把这个样式呢,好,咱们给它先复,十点二,我先不这样来回到我们这个页面当中,我们可以看到还有这个水平居中,垂直居中对齐吗?是不是没有了? 好,这个是 template 啊,主要是定义应用的一个结构,我们直接使用 html 标签哎,就可以了。 好,咱们再来看一下这个 script, script 主要是用于编写咱们的 js 逻辑,哎,我们可以看到在里面呢还有个 setup 这个语法呢,是 view 三当中简化组建啊代码的一种方式啊, 就相当于呢,是咱们在编辑运行的时候呢,把这个代码啊放到了 setup 函数当中来运行,哎,然后把导出的这个啊变量定义到这个上下文当中 啊,并包含在返回的这个对象当中,哎,然后呢,我们可以使用这个 ref 函数来创建一个响应式的引用,比如说 我们在这个组建的内部啊,我定义了一个 ref 类型的一个变量,比如我们在这个地方呢,我定义了一个啊, name 啊,写个啥呢?写个名字吧,写个名字啊,哎,也就我们提了一个 r, e, f 的 一个类型的一个两 name, 那 么在我们的这个模板当中,我们怎么来获取呢?咱们就可以直接的通过这个双大括号的方式来获取这个引用的值 name, 你看它展示在我们这个页面当中,展示的是个名字啊,对不对?哎,名字, 这个是,呃,这个 script, 然后下面的这个 style 呢?哎,用于定义样式啊,定义样式, 那为什么在这个样式 style 后面它会有一个啊 script 表示什么意思? 在咱们的这个啊 view 当中,我们写样式都是在这个 style 标签当中来定义这个样式嘛,那么这个 scope 的 表示的意思就是啊,就是为了防止当前的这个组件 或者说页面的样式,对啊,外界其他的页面组件哎造成影响,那么我们就会在这个 style 标签上面呢,给它添加一个啊 scope 的 这个属性, 那么使用的这个属性的样式呢,它会变成一个局域的样式,意思就是说只作用于当前的这个组建。 好,明白这个 scope 意思了吧?意思就是说让当前组建的样式呢,它是不会修改到其他地方的样式,这样会避免啊这个与局样式它的一个冲突。 刚才呢,我们介绍到了这个 app 点 view 啊,它三部分的一个呃组成,那我们刚才说到了,既然这个主键它是一个入口文件, 我们是不是就可以直接在这个主键当中,哎,我们就可以直接布局写结构了呢?比如我们可以看到的啊,整个项目当中啊,头部 好,我们下面的这个那页或说,哎,直接开始啊啊,页面的这个底部等等,是不是就开始那个进行布局了呢?大家记得啊,在咱们的这个 app 点 view 主键当中,我们经常看到的内容啊,我们经常会看到这样的一种写法 是在这个 template 当中,我们只看到一句 root down view 对 不对?是不是看到这样的,大家有没有注意到它表示的是什么意思呀? 它表示 view 应该就是在这个位置,在当前这个位置呢,渲染就是呃, 当前路由匹配的这个主键,就是把你指定的这个路由应用的内容呢,渲染在哎,咱们这个主键当中,这种机制呢啊,可以使 view 轻松地来实现这个单页面,哎,应用页面的这个切换。 好,先了解啊,下一节呢,我跟大家来介绍一下咱们的这个路由哎 root index 点 js 这个文件啊。好,最后我们再来总结一下 app 点 view 呢啊,这个主键呀,是整个 view 应用的根主键 哎,是应用结构的一个核心部分啊,通常负责呢就是展示它啊,基本布局和容纳哎,主键,那么 它里面的结构非常的清晰啊,含了有这个模板呀,脚本呀,样式啊,对吧,三部分哎,每一部分都承担不同的这个哎职责。好,那本节课的内容呢,跟大家就先分享到这。

ok, 我 们继续看这个路由的 v v o e 前端,然后上节课讲解了这个配置文件, 这个 jason 文件它就是配置文件。然后今天我们讲解这个,然后先连贯讲解一下这个,这个的话可以删除,对项目没有任何的影响,它就是一个笔记,我们项目里面的笔记,你看它输入一些命令, 然后你创建这个空文件夹,空项目他也有这个笔记,看到没意思,就是这个文件他不参与项目的,就是启动,或者是那些写业务逻辑,他就是记录一下, 然后今天我们讲解这个唯有一点 config 点。 gs, 你 看我们创建一个空的项目,它就会创建这个文件,而且这个文件它是在根目录下,然后一个完整的项目, 一个正常的完整的已经开发完成的项目,它也有这个配置文件,它里面有这么多,你看到没? 那么接下来我们就有一个问题了,这个配置文件是干啥的?我可不可以把它删除? 那么如果不可以的话,那它里面可以放一些什么东西,然后的话这这就是接下来这个配置文件,我们可以看一下 这个文件,在你创建一个脚手架的时候,脚手架项目的时候它就存在了,然后它是 v o e c o i。 项目的核心配置文件,用于自定义项目的构建、开发服务器、资源处理等各种行为。它的作用你看覆盖或者是扩展 v o e c o i 的 默认配置,这个是核心 啊,不能加粗,你看它都选择不了, 它没有保存,现在可以了。加粗,这个配置文件的核心作用就是覆盖或者是扩展 v o e c o i 的 默认配置, 它是基于 webshop 的 构建,但默默认隐藏了复杂的配置。那么对于这个配置文件来说,它它就提供了一个简洁的 api, 让你在无需修改底层的 webpack, 它的配置文件让你就可以实现这些。通过这个配置文件,你可以修改服务器的端口代理热更新,调整资源的路径, 配置它的选项,配置预处理,然后还有配置构建、优化集成第三方的工具等,好多你都可以在这里面。 所以现在我们就知道了这个配置文件,它是一个核心配置文件,它可以覆盖底层的那些配置或者是扩展底层的配置。 因为整个 v o e 项目,它的底层是啥呢? v o e c o i 项目,它底层就是用这个构建的, 所以核心的我们现在开发这个创建这个孔就是脚手架,它底层就是这个, 然后肯定是这个服务,你可以理解为它有一些配置文件,我们想改底层的配置文件怎么改?人家就给你提供了一个这个配置文件,它就可以覆盖或者是扩展 文件的格式与基本的结构。它是一个 g s 模块,需要导出一个对象或者是返回对象的函数,对象中的属性对应各种配置选项, 它的基本格式是这样, model 导出,然后的话里面是 k 和 value 的 形式,键值对,也可以使用这种形式去导出 接收参数变量。然后以下是一些常见的配置,比如说我们导出,如果我们项目用于配置本地开发时,我们可以配置端口 启动后自是否自动打开浏览器,然后的话是否启动? h t g p s 这是相关代理解决跨境的问题。 项目启动之后,访问这个就可以跳转到访问后端,允许跨域去掉请求中的 api, 因为我们前端调用后端接口的时候, 走这个它就自动跑到这,但是前面多了一个这个,所以但是我们请求后端的时候不要这个就可以把它去掉。 第二个是路径与资源的配置,当前这个配置文件你可以自定义路径与资源,首先也是导出, 就判断一下当前的生产环境是不是开发环境,然后的话输出的路径是不是 diss 的, 你看默认是 diss 的, 就打包之后你把项目放到哪个文件夹下,默认是 diss 的, 这个是静态资源存放的路径,它是相对于这个来说, 这个是整个项目的首页,首页的文件名称是什么?然后这个是文件名称是否包包含这个还是用于缓存控制处。 然后接下来你还可以在这个配置文件中写关于 webpack 相关的配置, 你看方式一直接添加它的配置,配置路径别名如用 at 指向 src 可扩展。 以后你代码中写它就相当于是写这个,写这个就相当于是这个,还可以添加它的插件,还可以用念似的方式 规则访问的, 还有可以限制它的图片的大小。关于 c c s 就是 css 的 相关的配置,就先判断它是不是生产环境, 然后这个是传递相关的信息,然后其他的配置,这是如果是生不是生产环境的话,就开启这个检查,这是入口文件,多页面配置的话是入口文件, 它是一个可选文件,如果项目不需要自定义配置,就用默认的,可以不创建该文件,看到没? 也就是我们的项目可以把这个东西给删了,虽然我们创建初初时创建的时候它有这个,我们可以把它删了。原因是什么?我们不需要改一些默认的东西啊,我们也不需要新增加 配置生效,修改完它后需要重启开发服务器 npm raw 才能生效,然后这是相关的配置文件,配置文档这个, 然后通过它你可以在不不破坏它原有的架构的前提下,灵活的制定项目的各种构建和运行行为,满足不同项目的需求。 ok, 现在我们就知道了,这个是个配置文件, 然后它里面可以配置的东西就是这些东西,看到没?这几个核心经常配置就是这些。 然后啥时候加载?因为我们刚才说了,整个项目的启动需要我们在项目的根部下输入,这个是固定的 n、 p、 m 状,然后后面是什么启动,就看这个文件里面,对吧。 比如说本地系统就输入这个,输入这个之后一按回车,它首先因为它是我们这个命令是在项目的根部下进行的,它首先去自动地找名字,为这个的名字必须为这个, 然后去找后面这个名称对应,去找这个属性里面的名称对应,然后自动执行后面这个脚本,那么在直背后执行这个脚本的背后,他就会去加载这个文件,如果有的话就会加载, 你看在启动项目时或构建这个时候被自动加载,自动输入命令就加载, 输入启动命令就加载这个配置文件,整个项目还没有,还没有干什么了,仅仅是即将要启动的时候,它首先下载的就是这个配置文件, 当你执行这个的时候或 n p m 说它就会在项目过程中会自动地查找项目根目录下的这个文件。这个要知道 我们输入启动命令或者是打包命令的时候,它会自动地查找项目的根目录下,根目录下就是整个,你看我们现在就在根目录下这个去执行项目的命令, 如果该文件存在,它会底层,底层就是就是 v o e 的 这个呃,脚手架,这个 c o i 它会,它就会去读取,如果有的话就会读取这个配置文件, 并且将你项目里面的这个里面的相关的东西去和底层的,你看默认配置配合并, 你输入启动命令,它就会加载这个,然后将这个配置文件里面的东西和底层默认的配置文件两个合并,合并之后用到项目的构建、开发服务器等流程中。 现在就我们就知道了当前我们看的这个配置文件 它是有什么作用,它是在什么时候加载,如果项目中没有这个,就会直接使用它默认的配置,不影响项目的正常运行。 这种自动加载机制是这个约定的一部分,无需手动引入或配置加载路径,只要文件名称正确,你看必须是这个且位于项目的根目录就会被自动识别。这句话要 我们要知道 卡死了, 只要文件名称正确,必须是这个,且位于项目的根目录就会被自动识别, 如果你修改了它需要重新开,就是重新启动才能使配置生效。 现在我们就知道了,什么时候去加载这个配置文件,对吧?项目启动的时候就加载,那么还有一个问题, 项目启动的时候是会加载它,谁会加载它?主要是给极依赖的构建工具使用的,具体调用流程是直接调用者,谁调用它就是底层这个服务, 这个配置文件是底层这个服务的专属配置文件,当你执行启动命令的时候,或者打包命令的时候,底层这个服务会作为入口程序启动。首先自动检测 项目的根目录下是否存在这个配置文件,如果存在就读取里面的东西于底层这个服务 v o v o e。 项目底层 它就依赖于这个服务,它就会与底层这个服务的默认配置进行合并。用户我们在这个配配置文件里面写的配置文件会覆盖它,默认的 合并后的配置会作为最终的参数传递给后续的构建流程, 谁还会进行调用,这是直接调用者,间接使用者是它我们的底层,这个是 voe cio, 它是基于它构建的,所以底层还是它就是间接的使用着配置,最终会转为它可以识别的配置供企业使用。项目的打包、模块处理、代码分割等核心功能全部都依赖于它中的这个等配置, 然后的话相关的依赖端口那些东西, css 还有图片处理这些全部都依赖于这个配置文件,如果你不写的话就用使用默认的。 我们总结一下这个交易关系,用户执行,用户在项目的根目录下去执行一个启动命令的脚本,它就会触发底层的这个这个服务, 然后它就会为什么会触发?因为我们输入这个启动命令之后,它会找 这个文件里面的这个名称,为这个里面的对象里面的你输入的哪个就是对应哪个,就是底层调用这个命令,间接的调用这个命令,它就会加载配置文件, 然后合并将你修改的配置文件。有了这个里面的东西,和底层默认的配置文件合并,然后就传给了底层的其他的那些工具,然后的话底层就会默默的构建或者是启动服务。 简单来说,当前这个配置文件就是用户与 ve c u i 底层之间的一个配置桥梁,所有的配置最终都会作用于项目的构建,开发服务器的核心流程,实现自定义项目的目的。你看自定义 我们就可以自定义一些东西,比如端口,我就想用八零八零,我就想用九九幺幺,对吧?你就可以在这个配置文件里面写, ok, 现在我们就知道了,当前这个配置文件它里面可以写一些什么东西,就在这常用的配置,然后谁会加载它,谁会调用它,什么时候加载?这些问题都给你解答了。

小伙伴们大家好,欢迎和我一起学习前端开发。好,那打开我们刚创建的这个项目啊, 啊,我们可以看到它里面呢,是包含了一些啊,很多的一些配置文件,那么这些配置文件分别又表示什么呢?啊,咱们先来看一下这个 s r c a 这个原文件啊, 几乎它里面的这个文件呀,我们都要去了解,包括里面的这个啊,设置组件,像路由啊,啊, store 对 象啊, views 图啊,还有像这个 app 点 view 组件呀,啊,慢点 gs 这个文件啊, 来,我们先来看一下这个慢点 gs 这个文件啊,它分哎,它表示的又是什么?它的作用,哎,有哪一些呢? 呃,这个文件呢,它是我们整个项目的一个入口文件,哎,通常啊,我们用于创建和挂载这个 view 十例,并且呢配置一些全局的设置,咱们可以在慢一点 g s 文件当中啊,哎,来注册这个第三方插件。 好,我们可以看到它里面的一些结构啊,这个 import, import 呢,是 es 六模块化的导入,哎,导入, 你看第一个表示的是什么?它导入的就是我们 view 三的核心功能哎,用于创建一个 view 的 应用, 你看下面这个呢,下面这个,哎,我们一看到什么 style 点 css, 这不就是我们比较熟悉的这个样式文件吗? 所以它导入的就是局的样式文件,是哪一个来着?是不?它呀, style 点 cs, 是 不是局的这个样式文件呀?哎,是不是在这儿? 好,然后下面的呢?啊,这个 app 点 view, 它引入的是我们的这个根主键,是谁呀?是不是这个?哎,引入的是我们的这个根主键,然后下面这个呢?啊, root index 点击 s 文件,它表示的是导入的 view 的 路由的配置。哎,后面呢,我们会跟大家重点来聊到这个 root 里面的这个 index 点击 s 文件啊, 那这个文件通常呢是用于啊?大家先了解一下,我们可以定义想应用的这个,呃,路由规则,路由首位啊,页面主键的映设等等, 那我们可以通过这个 root 呢,可以在应用中来设置不同这个页面路径和主键之间的一个跳转。好,我不知道大家看到我们刚才导入的这几个,不知大家有没有疑问呀, 它导入的时候,后面呢,它表示的是什么?它表示的是一个,哎,路径,这个路径为什么有的有这个点杠有的,哎,没有呢?那么这个点杠它表示的又是什么意思呀? 哎,点杠,点杠,我们经常还有的时候啊,会看到有那个点杠,有的,那还有什么?点点杠,还有什么?还有艾特符号杠,对不对?那会看到这样的一个写法吧,那么点杠不用说了啊,你看我们这个地方看到很多表示的是什么?它是不是表示的是同一级啊? 嗯,它表示的就是同级。哎,我们引入的呢,这个四二点四 s 引入的是 app 点六,这个组键对不对?表示的是同级。那么点点杠呢,它表示的就是上以及 a 艾特符号杠呢啊,我们 表示的是什么? a 这个 n 目录, a 目录下是一个 s l c 目录下。好,所以根据我们的这个需求来定义它后面的这个 a 路径啊, 那我们还可以在这个慢点 g s 文件当中还可以引入什么呢?刚才说到了我们可以注册第三方插件 啊,或者说我们还可以引入外部的一些样式文件啊,比如 css 文件,比如我们还可以引入字体图标库,对不对?我们都可以在这个啊,慢一点接触文件当中啊,引入。 好,那如果说我现在要引入的是咱们的这个 css 文件啊,还有像咱们的这个,哎,字体图标,哎,我要引入进来,咱们怎么引入呢? 直接 import 我 们引入的后面呢?它是一个,哎,一个路径,路径就不要定义错了啊,那你看我们这个地方应该是写点杠还是什么点,点杠应该怎么来定义啊? 点杠,我们刚才看到了啊,表示同级,那么点点杠表示上一级,我们现在所在的是慢点 gs 文件,哎,我们我们可以怎么来定义啊? 哎,零点杠吗?零点杠可以啊,找到 i s, r c, 或者说我们也可以直接的通过这个目录下,哎,二十符号对不对?好,然后呢?找到, 哎,我们的这个 c s、 s, 我 现在要引入的是咱们的啊,这个样式吧,我们引入这个公共样式啊, i 点 c s 文件,或者说我们还可以,刚才看到了,那还可以引入这个图标, i 字体图标 啊,字体图标是点 c s 文件, 那么,哎,在咱们的这个项目当中呢,我们就可以使用这个里面的这个图标库里面的图标了啊,这个是引入外部的一些样式文件和字体图标的样式。 ok, 那 本节课的内容呢?跟大家就先介绍到这。

如何实现 agent 与现有 react 为有主见无缝交互?近期需要前来面试的同学可以来看一下这份面试宝典。场景题,心灵优化、工程化以及大量八卦文都有。这里我们需要用到方显关联, 它是一种让大模型输出结构化阶上的数据,从而触发外部函数执行的机制。 大模型本身不能直接执行任何代码,也不能直接点击前端的按钮。我们在提问时会把前端能做的事情以节省代码的形式告诉大模型。大模型通过自然语言理解用户的意图, 如果发现需要调用图标主键,它就会停止生成普通文本,从而返回一个包含函数名和所需参数的数据包。 前端拦截到这个特定的响应格式,提取函数和参数,去调用前端内存中早已绑定好的 react 为 u 状态更新函数。 以下以 react 为例演示。当用户输入帮我画一个今年销量的饼图时, agent 如何无缝渲染前端图标主键?好,我们来看下代码 整体结构,主要包含基础的 ui 主键、一个函数注册表以及处理核心请求的逻辑。 首先,我们需要一个现有的普通 react 的 主键,比如代码中的 cuse, 它接受 data 作为 props 并渲染,在全代码中定义一个对象, function register 箭式大模型将要调用的函数名 只是一个逼包,函数里面调用了 react。 set state, 发送请求时告诉大模型可用的 tools。 大 模型返回结果后,检查是否有方线括号制段,获取方线括号点 name, 在注册中心匹配对应的方法,将解析后的 arguments 传入执行后, set state 被触发 react 数据流,驱动 cs 恰即自动渲染出最新数据,实现无缝交互。

ok, 那 我们刚刚看了上一个问题,对吧?直接给一个数值项进行赋值, will 不 会监测到变化,那我们接着就来看,那怎么办呢?也许面试官问完你以上一个问题,他会就会接着问你,那这种情况你是怎么处理的,对吧?那怎么办呢?或者假如没有问上一个问题,他直接问你, will are 的 dollar set 你 是否用过呢? 你有没有用过啊?对吧?这个就是我们关于呃这个 will are 的 第二个问题。首先我们先来看它是干嘛的,好吧,那 dollar set 这个东西哈,我给大家在这写一个这个 dollar size 它是干嘛的呢?这个 api, 它呢是用于向响应式对象中添加新的属性,或者更改现有属性的值,并确保这些变化能被 view 的 响应式系统检测到, 对吧?我们刚刚说了,直接去更改的话,它不会检测到,那这个 dollar size 就是 为了解决这个问题,你看它可以解决,你直接给一个对象或者添加一个新属性,或者 是给一个数组改变它下标原有的值,这个新的值不会被 real 的 响应式系统自动跟踪,也就是这个新的属性发生的变化,试图不会进行更新,对吧?那它呢?就用来改变这个的,那我们来看,我们还按刚刚的例子来看 items, 好 吧,还来看我们的这例子, item area 呢,等于 a, b, c, 对 吧?那我们点击按钮呢,刚刚是直接给它改到下标,对吧?这种的话,我们说了 view 它不会去监测到,对吧?那我们就可以使用 this 点 set 给它去进行一个更新,比如说哈, 我 this 点 set, 然后 this 点 array, array 第二个是什么呢?就是它的,嗯, k 就是 对于对象来说,就是它的属性嘛,对吧?那对于数,嗯,数组来说,就是它的下标,你要改成什么呢?比如说你要改成 d d, d, 我 们还按刚刚的指示来看,哈,那我们再来看 abc, 对 吧?我点击按钮,你看它不仅变了,而且它能被 view 监测到,对吧?它只,而且它就会更新到我们的矢图上了。所以呢,这个 dollar set 就是 为了解决你直接去给一个对象或者呃,修改它原有的属性,或者添加个新的属性, 或者说你直接给数组下标改变一个值,对吧?那它不会被 view 跟踪到,你看不会被 view 系统自动跟踪,那它就不会去 在试图上有任何的变化。那我们这个呢,就是为了解决就让它,哎,我这个东西就是这个 api, 就是 通知系统你要自动跟踪我这个属性,哦,然后呢, 跟踪了之后,我们试图层也就会跟着发生变化了,对吧?所以呢,这个就是我们 dollar set 它的一个使用,以及它的呃,作用是为了来干嘛的?好吧,那 ok, 那 我们今天关于 dollar set 这节课就给大家分享到这里。

ps 四 vue 折腾如何使用 esp 三二虚拟网络?那之前两期我给大家分享了如何把我们的 ps 四通过 vue 的 方式来进行折腾,那 vue 折腾的方法优点是它不需要光驱,方便快捷,同时还可以支持到十三点零零的系统版本, 那么很多小伙伴就改用了 vue 的 折腾,但目前 vue 折腾的话,有一个麻烦的地方就是它一定要依赖于网络。 那么大家都知道啊,如果你家里的网络是连在互联网上的话,我们的 ps 四有的时候它就会自动去下载我们的最新固件,这样就有一定的风险导致我们的系统升级,那为了防止这种事情的发生呢,最好是我们能够连接一个网络,但又不希望这个网络连接在互联网上,那怎么办呢?在之前的视频我也给大家分析了 一个,你可以使用一个二手的路由器,然后呢连接到这个二手的路由器上,但这个路由器呢,不要连接外网,那缺点呢,就是路由器的体积比较大,而且还需要额外供电,携带也不方便,所以我今天就给大家介绍第二个方法,就是使用 esp 三二的折腾器, 它的优点呢就是小巧方便,不需要额外供电啊,插在我们的 ps 四的 usb 口上也没什么影响。那么用过这个折腾器的小伙伴都知道啊,它其实是使用自己的芯片虚拟了一个网络,但是它是不连到互联网的,那么正好可以满足我们 vue 在 折腾的时候需要一个网络,但又不能够连到互联网的这样一个需求。 大家好,我是老王韩宇,那么我今天就给大家分享一下如何使用 esp 三二来虚拟网络,让我们的 v o e 能够脱网使用。那么 esp 三二呢,就是这样一个芯片,我们可以直接到网上去买到啊, 那之所以叫它 esp 三二,就是因为它的芯片是 esp 三二的核心。那么之前其实我的视频已经给大家演示过,如何我们去刷这个 esp 三二,把它刷成一个折腾器, 其实整个烧录过程也是非常简单的啊,那么工具和软件都在主页粉丝群,而且我还给大家设计了一个三 d 打印的盒子,这样的话,我们的这个 esp 三二呢,做出来的就是这个样子的啊,看上去还可以 啊,至少有个保护壳了啊,看上去没这么丑啊。那么我接下去就演示一下 esp 三二在我们的 vue 中如何使用,那把我们做好的 esp 三二直接插到我们的 ps 四的 usb 口,然后再进到我们主机之后呢,在设置中进入网络, 那注意这边的这个连接互联网要打个勾啊,然后设置我们的网络一样的,我们是连接 wifi, 在这里使用定制好,那么关键是在这里这个时候呢,我们就看到有一个 ps 四开头的这样一个 wifi 网络,这个网络就是我们用 esp 三二虚拟出来的,那它就不是我们家里面的这个公网的 wifi 了, 所以我们可以直接连接这个虚拟出来的 ps 四的网络,那么点击它之后呢,它是没有密码的,你直接就可以连上了。那么这边一样是自动啊,不指定啊, dns 的 设置啊,跟我们之前的设置是一样的啊,也是这边使用手动,然后首选 dns 啊,打入这个 ip 地址, 其他的都是不变的啊,继续自动不设定。再返回之后查看一下我们的网络,这个时候我们就可以看到它获得了一个 ip 地址,并且首选 dns 也会在这上面显示。而返回到我们的首页,我们再进到我们的 miu 应用 提示,用大叉跳过啊,进入到我们的 v o e 折腾界面,方法跟我之前发布的视频的内容其实是一样的,这里我就不再多介绍了啊,那就是直接越狱成功了之后呢,我们就返回首页,就会出现这个 go 的 标志, 我们在这里顺路我就装个游戏,看一下它的效果怎么样啊。插上一个 u 盘,这个 u 盘里面带了一个 pk 机的安装包,然后我们进到 go to, 直接找到这个 pk 机,我们进行安装。 pk 机安装完了之后,返回到首页,我们就可以看到我们安装的游戏了,接下去我们就运行一下这个游戏,看看效果如何。 好,这就是我今天的分享,要刷 esp 三二的,这个折腾器的文件和工具都在我的主页粉丝群,我都分享给大家了,教程之前我也发过,大家都可以去看一看,自己动手来刷这个 esp 三二折腾器。好,我是老王韩雨,喜欢我的视频,点赞关注,我们下期再见!

面试的时候大家一定要大胆一点,我见好多人简历里面写用乾坤啊,或者无界啊, make up 啊等等。做这种微前端,他可能只聚焦在某一个微前端框架里面,这时候你一定要跳出框架思维, 一定要从全区去看,给面试官这么去聊。就是你在做的时候,你可以说整个项目都是你自己做的 技术选项,然后你对比一下像这种业界的主流的无铅酸方案,他们的一个区别,他们使用场景,然后你基于这个,你是怎么样做应用改造的?只用用,只用用,对吧?这里面不管你只用用是用 v 三的技术站, 还是用 red 九站,还是 v 二的九站,虽然你在公司里面做的业务都是单个的某一个只用用的某一块功能,对吧?这时候你可以包装一下,也就说整个技术选项都是你做的,你不要怕,因为为为什么呢?因为在公司里面,你只要面试通过了, 你干活肯定是没问题的,因为我们现在在企业里面写代码,谁不会用 ai 呢?他都会去用 ai 去做我们的业务,你只要面试通过,干活肯定没问题。 要提到微前端 s 角度,微前端关键的几类问题,既然杀相这么做的,既然隔离全军备战无败,还有应用之间通讯又是怎么实现的?你只要把相应的技术点掌握了,每一种技术就掌握了,你微前端相关的不就这些技术点吗?代码拿过去跑一跑,然后简历里面你可以按照这种方式去写, 你再结合你的项目,因为面试常考的就这么几类,没了你没做过, ok, 你也可以去包装一下,类似于这样的,运行一下这个代码,跑一跑就可以了啊,代码的话都有,需要的话大家评论区留言。 当然这里面除了微前端啊,其实内容是非常多的,除了微前端,还有我们前端所有的场景等等,大家可以去看一下,希望对你面试找工作有帮助。面试大家不要害怕,大胆的包装。