记录--9个封装Vue组件的小技巧

这篇具有很好参考价值的文章主要介绍了记录--9个封装Vue组件的小技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--9个封装Vue组件的小技巧

组件是前端框架的基本构建块。把它们设计得更好会使我们的应用程序更容易改变和理解。在这节课中,分享一下在过去几年中工作中学到的 9 个技巧。

1. 你可能不需要创建一个组件

在创建一个组件之前,看看它是为了可重用性和为某些UI添加一个状态,还是仅仅为了组织和划分代码。

如果是后者,那么你就不需要创建它,因为它只会增加更多不必要的工作,比如传递props和发射事件。

不仅如此,它还要求我们跳转到该文件以查看它所包含的内容,而不是直接在父组件中看到它,这就干净多了。

2. 使用插槽而不是 prop 来显示内容

假设有一个可重复使用的按钮组件,它通过props获取文本。

<BaseButton label="Delete Item"/>

如果想在其中显示一个图标,必须添加更多的道具,如<BaseButton label="Delete Item" icon="delete" />并更新组件以显示该图标。

但有了插槽,我们就可以在每次使用该组件时,以想要的方式显示标签:

<BaseButton>
  Delete Item <Icon name="delete" />
</BaseButton>

或者你只需要把某个单词加粗。对于插槽,可以直接在文本中使用<strong>标记,而不是在组件中解析它。

3. 将该组件与触发它的因素分组

有时有两个独立的组件在某种情况下一起使用。最好把它们放在一个新的组件中,这样重复使用和移动它们更容易。

一个常见的例子是 Modal 组件。我们通常在点击一个特定的按钮时显示Modal。与其在每次我们想重用它(或把它移到其他地方)时添加showModal状态和导入modal与它的按钮,不如有一个单一的组件来显示按钮,当用户点击时,它显示相关的modal。

<!-- CreateItemButton.vue -->
<template>
  <Modal v-if="showModal" @close="showModal = false" />
  <BaseButton @click="showModal = true">
    Create Item
  </BaseButton>
</template>

<script setup>
const showModal = false
</script>

4. 使用 teleport,从任何地方显示固定位置的元素

继续前面的例子,如果我们想正确地显示 modal ,我们需要确保模态使用正确的z-index,并且它在HTML代码中显示在正确的位置,所以它总是显示在页面上所有东西的上面。

我们可以通过直接将 modal 显示为<body>元素的一个子元素来轻松地避免这个问题,无论我们在组件结构中使用它。

Teleport组件使我们能够做到这一点。

我们所要做的就是用 <Teleport to="body"> 来包装 modal 组件。

<!-- BaseModal.vue -->
<template>
  <Teleport to="body">
    <div class="modal"></div>
  </Teleport>
</template>

这个组件是Vue 3内置组件的一部分。如果你使用的是Vue 2,请查看PortalVue。

5. 在一个对象中分组相关的 props

组件的 prop 列表是组件界面的一个主要部分。接口越清晰,就越容易使用和推理。

改进 prop 列表的一个方法是将相关的属性分组在一起。以这个组件为例:

<PostCard
  :title="post.title"
  :date="post.date"
  :layout="currentLayout"
  :image="post.imageUrl"
  <!-- more props -->
/>
我们需要花几秒钟时间来了解这里有哪些 props 与帖子(post )相关。但我们可以像这样把与帖子相关的 props 分组,使之更加清晰。
<PostCard :post="post" :layout="currentLayout" />

所以现在我们很快就知道,layout 不是 post 数据的一部分。

不仅如此,我们还通过这种方法使更新 props 变得更加容易。例如,添加或删除与帖子相关的props ,不需要我们更新组件的 props 列表。

6. 赋予每个循环item,赋予自己的状态

创建一个新的组件的一个很好的理由是给一块用户界面提供它自己的状态。我们需要这样做的一个常见的地方是在v-for循环中:

<template>
  <div>
    <div v-for="(item, index) in items" :key="item.id">
      <input type="checkbox" v-model="checkedItems[index]">
    </div>
  </div>
</template>
<script setup>
const checkedItems = ref(items.map(item => item.checked))
</script>

为了跟踪检查过的 items,我们不得不创建一个数组,并用 items 的初始值来填充它。但是这段代码还不够强大。为了让它变得更好,我们必须让 items 通过它们的id而不是index 来访问,因为 index 是不可靠的,可以改变。例如,如果你添加一个支持通过拖放来重新排列items 的功能呢?

为了简化这段代码,我们可以引入一个新的组件,为每个 item 保存一个状态。像这样:

<template>
  <div>
    <Item v-for="item in items" :key="item.id" :item="item" />
  </div>
</template>
Item 组件内容如下:
<template>
  <div>
    <input type="checkbox" v-model="checked">
  </div>
</template>

<script setup>
const props = defineProps({ item: Object })
const checked = ref(props.item.checked)
</script>

这种方法的另一个好处是,我们把所有 item 的相关数据、计算属性和方法都加在一个地方,便于理解和改变。

7. 尽可能地将加载数据移至其用户界面附近

无论你是用GraphQL还是其他API加载,最好把代码放在尽可能接近使用它的用户界面的地方。这有两个原因:

  1. 移动带有数据的UI组件变得更加容易。只需移动该组件,而无需寻找其依赖关系。

  2. 当所有的碎片被放在一个地方时,总是更容易理解代码--可以看到用户界面和它的数据来自哪里。

有时,有多个组件使用同一个获取的数据。在这种情况下,可以将获取的代码上移一级。因此,会有一个父组件,在那里获取数据,还有一个子组件,然后把数据传递给它。

但一定要确保它是一个单一的层次。如果不是,那就寻找一种方法来改进你的组件设计和它们之间的关系。

8. 纯粹的UI组件不应访问应用程序的状态

有两种类型的前端组件:纯UI组件和特定应用组件。

纯粹的UI组件是像按钮、输入框等。它们不应该知道关于应用程序的任何事情。它们的工作仅仅是为了显示UI--它们通过 props 获取数据。

特定于应用程序的组件是知道应用程序状态的组件,无论是本地状态还是全局状态(通过状态管理库,如Pinia)。

分离这些组件使得在应用程序的其他地方,甚至在其他应用程序中重用UI组件更加容易。

如果你正在构建自己的UI组件,这个技巧也适用。如果你使用的是外部库,如 Vuetify 或Quasar,那么你就不必担心这个问题--这些组件在设计时就考虑到了这一点。

9. 不要在组件中指定 width 或 margin

当创建一个组件时,你应该把它看作是一块UI,可以像其他本地元素一样使用。

让用户指定组件周围的空间是实现这一目标的好方法。

假设你的组件在其根元素上有一个顶部边距,而用户想把它显示在某个元素下面,但没有顶部边距。要做到这一点,用户必须设置一个与组件的margin相同的负margin,比如margin-top: -50px;更不用说在某些情况下,用户必须与选择器的特异性相匹配(或者可能使用!important)。

而宽度也是如此。如果用户想让该组件具有响应性,他们必须覆盖其宽度和最大宽度。

因此,通过不在组件内部设置宽度和边距,总是给用户这种控制是有意义的。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

来源:tahazsh.com/blog/vue-co…

本文转载于:

https://juejin.cn/post/7158969880362876964

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--9个封装Vue组件的小技巧文章来源地址https://www.toymoban.com/news/detail-440957.html

到了这里,关于记录--9个封装Vue组件的小技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录uniapp 高度铺满全屏的小技巧

    在uniapp中,高度使用heiht:100vh,h5的屏幕会多出一些高度,导致可以上下滑动 解决方式如下 在app.vue中设置一个公共样式 在需要高度铺满全屏的页面的最外层的view绑定类名page,样式为 就可以实现页面高度铺满全屏了

    2024年02月11日
    浏览(36)
  • 电子取证之服务器取证,本人第一次从pc取证到服务器,这里有一套例题分享给大家,所有解析我都尽可能全面具体,希望与各位同仁一起学习。(二次修改)

    话不多说,先上链接,这个包含一个2G的服务器镜像和题目,原题是弘连公司的,致谢,此处纯粹分享解法供大家学习。 第二次做题目,发现宝塔新版已经不支持,所以题目意义减少,还是欢迎手搓与小白来看看 链接: https://pan.baidu.com/s/1p8T7Fez_VlnSqdzvptARRw?pwd=ybww 提取码: ybww

    2024年02月07日
    浏览(51)
  • vue3中一些简单的小技巧

    最近在学习vue3+vite的时候学习到的一些小技巧,现在记录一下 学习vue3+vite中看到了一些小技巧,这个小技巧可以在写代码时更加的顺畅,更加的丝滑。 在写vue3中,有一个语法糖大家一定很清楚,那就是setup,但使用setup语法带来的一个问题就是无法自己设置name,而当我们使

    2023年04月09日
    浏览(36)
  • vscode中如何快速生成vue3模板-非常实用的小技巧

    在vue项目开发过程中,我们会发现我们每次新建一个vue组件文件的时候,都需要写一些重复的代码,比如下面代码: 在vscode编辑器中,那有没有什么办法能够让我们快速生成这样的模板呢,答案是有的! 如果觉得对你有帮助的话还望点个赞 + 收藏一下,希望能够帮助到更多

    2024年02月15日
    浏览(61)
  • Vue组件封装:基于Vue3+wangeditor富文本组件二次封装

    1.简介         开源 Web 富文本编辑器,开箱即用,配置简单。一个产品的价值,就在于解决用户的问题,提高效率、降低成本、增加稳定性和扩展性。wangEditor 不是为了做而做,也不是单纯的模仿谁,而是经过上述问题分析之后,给出一个系统的解决方案。旨在真正去解决用

    2024年04月08日
    浏览(46)
  • web前端开发教学视频,VUE项目配置ESlint后一些报错解决方式,4个改变你编程技能的小技巧

    ‘no-delete-var’: 2, // 禁止出现未使用的变量 ‘no-unused-vars’: [2, {‘vars’: ‘local’, ‘args’: ‘none’}], // 禁止出现空函数 ‘no-empty-function’: 2, // 禁用不必要嵌套块 ‘no-lone-blocks’: 2, // 这条规则强制执行v-on指令样式,您应该使用速记。 ‘vue/v-on-style’: [2, ‘shorthand’], //*

    2024年04月13日
    浏览(36)
  • Vue组件化开发--公共组件的封装

    目录 为什么要封装组件 应用场景 vue自己封装组件(局部、全局)  Vue组件的三要素 ①全局组件 1)方式:  2)示例: ②局部组件 1)方式: 2)示例: 命名规范:(注意) 脚手架vue-cli中的组件 父传子(props) 通过 $on 传递父组件方法 $parent获取父组件然后使用父组件中的

    2024年02月05日
    浏览(59)
  • Vue如何封装组件

    要封装一个 Vue 组件,可以按照以下步骤进行操作: 创建一个新的 Vue 单文件组件(.vue 文件),并命名为你的组件名,例如 MyComponent.vue 。 在组件文件中,使用 template 标签定义组件的模板结构,使用 script 标签定义组件的逻辑,使用 style 标签定义组件的样式。 在 script 标签

    2024年02月13日
    浏览(33)
  • vue 封装Table组件

    基于element-plus UI 框架封装一个table组件 在项目目录下的components新建一个Table.vue 在具体的父组件中使用:

    2024年02月07日
    浏览(40)
  • vue 封装一个Dialog组件

    基于element-plus封装一个Dialog组件

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包