文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

很多人不知道 Vue 中的组件就是一个函数!

2024-12-11 19:39

关注

[[333552]]

这是一个强大的简化,如果你曾研究过Vue代码库的复杂性,那么你就会知道这实际上不是事实。但是从根本上讲,这就是Vue为我们所做的事情。

看一下这个组件:

  1.  

 

下面是用 Javascript 实现,它做了同样的事情:

 

 

  1. function component(title) { 
  2.   let html = ''
  3.  
  4.   html += '
    '
  5.   html += ``; 
  6.   html += '

    Some words that describe this thing

    '
  7.   html += ''
  8.   html += '
'
  •  
  •   return html; 
  • 该代码与Vue组件构造HTML 方式基本相同。当然,这里没有响应性,事件处理或其它一系列功能,但是获取输出的 HTML 是同一回事。

    如果你从未想过以这种方式考虑组件,那很正常,很多人也没有。

    当你开始学习Vue时,会看到新的语法和所有这些神奇的东西,它们看起来与我们以前接触过的任何东西都不太一样。

    依靠编程基础

    一旦真正意识到 Vue 组件实际上只是函数,那么我们就可以发现一些隐藏的知识点。

    我们可以从学习 Javascript 或任何其他编程语言中学到的知识应用到 Vue 中。

    例如,假设我们想学习如何编写优雅和简洁的Vue组件。我们可以将所学到的编写干净 Javascript 的知识应用到Vue组件中。比如保持函数简小,使用描述性名称,等等

    即使是学习类似的框架,如React或Angular,也是非常有用的练习。

    现在让我们看一个更详细的例子。

    以新的视角进行重构

    假设有以下的一个组件:

    1.  

     

    为简化,我们将v-for内部的内容变成了一个新的组件,如下所示:

    1.  

     

    完成此操作后,我们将其替换为父组件,这使我们摆脱了多余的嵌套:

    1.  

     

    如果我们在写Javascript,我们会用几乎完全相同的方式来做这些。

    下面是一个使用循环的例子

    1. function goingLoopy() { 
    2.   const elements = document.querySelectorAll('.item'); 
    3.  
    4.   for (const el of elements) { 
    5.     const { width } = el.getBoundingClientRect(); 
    6.     if (width > 500) { 
    7.       el.classList.add('large'); 
    8.     } 
    9.   } 

    在这里,我们使用 DOM 方法获取了类为 item 的所有元素,如果它们大于500px,则将large类添加其中。

    这已经很好了,但是如果还要优化代码,应该怎么做呢

    我的猜测是,你可能会把for..of的内容带入一个新函数中:

    1. function updateElement(el) { 
    2.   const { width } = el.getBoundingClientRect(); 
    3.   if (width > 500) { 
    4.     el.classList.add('large'); 
    5.   } 
    6.  
    7. function goingLoopy() { 
    8.   const elements = document.querySelectorAll('.item'); 
    9.  
    10.   for (const el of elements) { 
    11.     updateElement(el); 
    12.   } 

    如果你将组件看作是一个函数,那么对于我们的优化会有更深入的了解。

    他们一直在你脑海中,你只是没有意识到。

    作者:Michael Thiessen 译者:前端小智 来源:medium

    来源:https://medium.com/js-dojo/vue-js-functional-components-what-why-and-when-439cfaa08713

    本文转载自微信公众号「****」,可以通过以下二维码关注。转载本文请联系****公众号。

     

    来源:大迁世界内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯