一个孤独的孩子:我该不该将控制流指令写入通用结构组件中?

开发 前端
控制流指令,如v-if和v-for,如果在较大项目中,就很有可能会创建一些难以阅读的嵌套代码。如果在v-if内嵌套了v-for ,刚这个特征就更明显了。

 控制流指令,如v-if和v-for,如果在较大项目中,就很有可能会创建一些难以阅读的嵌套代码。如果在v-if内嵌套了v-for ,刚这个特征就更明显了。

[[335072]]

为了程序员的头发着想,我希望大家不要编写具有多级嵌套代码。

但是,如果你偏要这么干,那么送你一个技巧,可以以轻松地将这些噩梦转变成童话故事。

一个孤独的子组件

当嵌套开始变多时,如果我还想要保持整洁,我的默认做法是将代码提取到一个新组件中。

使用v-for和v-if,我们把指令中的所有东西都转换成它自己的组件。

举个例子来看看,我们从这个有嵌套的模板开始

  1. <template> 
  2.   <div> 
  3.     <h1>{{ title }}</h2> 
  4.     <div class="navigation"
  5.       <!-- ... --> 
  6.     </div> 
  7.  
  8.     <div v-for="item in list"
  9.       <h2 class="item-title"
  10.         {{ item.title }} 
  11.       </h2> 
  12.       <p class="item-description"
  13.         {{ item.description }} 
  14.       </p> 
  15.     </div> 
  16.  
  17.     <footer> 
  18.       <!-- ... --> 
  19.     </footer> 
  20.   </div> 
  21. </template> 

接着,我们把 v-for 里面的内容提取到一个新的组件中:

  1. <template> 
  2.   <div> 
  3.     <h2 class="item-title"
  4.       {{ item.title }} 
  5.     </h2> 
  6.     <p class="item-description"
  7.       {{ item.description }} 
  8.     </p> 
  9.   </div> 
  10. </template> 

如果我们导入这个新组件,我们会看到它很好地摆脱了所有嵌套:

  1. <template> 
  2.   <div> 
  3.     <h1>{{ title }}</h2> 
  4.     <div class="navigation"
  5.       <!-- ... --> 
  6.     </div> 
  7.  
  8.     <ListItem 
  9.       v-for="item in list" 
  10.       :item="item" 
  11.     /> 
  12.  
  13.     <footer> 
  14.       <!-- ... --> 
  15.     </footer> 
  16.   </div> 
  17. </template> 

此示例中没有太多的嵌套,所以单独为一小部分内容做一个组件,有点繁琐。但是,如果我们有两个,三个或更多的嵌套级别,则此技巧可以消除嵌套结构并让代码更易于理解。

但这里有一个问题:为什么我们不把v-for指令也写入新的组件中?

我们应该把控制流指令放入新的组件中吗?

假设,我们上面的 v-for 放到新的组件内,则我们会得到下面的结构:

这样看上去,父组件确实清晰很多。但不幸的是,这种变向的把复杂度放到了子组件中:

  1. <template> 
  2.   <div> 
  3.     <div v-for="item in list"
  4.       <h2 class="item-title"
  5.         {{ item.title }} 
  6.       </h2> 
  7.       <p class="item-description"
  8.         {{ item.description }} 
  9.       </p> 
  10.     </div> 
  11.   </div> 
  12. </template> 

哪种方式更好?

如果你最终的目的就是想减少嵌套数量,那么这个选择肯定更糟糕。我们在子组件中添加了额外的嵌套级别,而没有减少父组件中的嵌套级别。

通常,我会避免将诸如v-if和v-for之类的控制流指令放在这样的组件的根部,因为它会影响可重用性。

如果只需要一个简单ListItem 该怎么办?

假设使用v-if,如果要使用不同的逻辑在组件之间进行切换,或者要使用完全不同的组件怎么办?

将控制流指令写小最小通用结构的组件中会限制我们的灵活性,而不会给我们带来更多的便利性。因此,我倾向于将控制流指令留在这样的小组件之外。我还尝试避免将它们放在组件的根部。

一旦你深入了解“底层”的情况,此问题及其解决方案就会显得更加有优势。

作者:Michael Thiessen 译者:前端小智 来源:medium 原文:https://www.digitalocean.com/community/tutorials/vuejs-component-slots

洪迪 本文转载自微信公众号「 大迁世界」,可以通过以下二维码关注。转载本文请联系 大迁世界公众号。

 

责任编辑:武晓燕 来源: 大迁世界
相关推荐

2016-04-01 10:57:50

敏捷开发团队配合

2022-08-05 07:37:39

单体架构迁移微服务

2023-08-14 18:03:32

2015-10-20 09:07:44

2009-07-01 15:33:23

JAVA认证

2022-09-13 07:31:50

工具代码Lombok

2010-10-25 14:16:59

扁平化网络

2020-11-18 09:48:09

Synchronize多线程Java

2018-07-30 08:37:02

数据库Redis数据结构

2012-02-15 09:48:31

移动娱乐广告封杀

2013-02-18 09:40:28

2013-01-23 14:19:56

健康类App移动应用

2021-05-25 10:28:47

网络安全网络攻击网络事件

2023-11-28 12:00:22

应用程序API

2014-12-30 09:30:57

.net语言选择

2019-03-28 09:44:33

程序员加薪创业

2013-05-23 15:24:57

Wi-Fi无线网络设置无线网络展望

2016-12-22 23:55:40

架构师代码技术

2020-07-08 09:41:56

新基建5G互联网

2020-03-09 09:33:31

网络安全人脸识别技术
点赞
收藏

51CTO技术栈公众号