iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Vue.js的注意事项有哪些
  • 526
分享到

Vue.js的注意事项有哪些

2024-04-02 19:04:59 526人浏览 八月长安
摘要

这篇文章主要讲解了“vue.js的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue.js的注意事项有哪些”吧!1、为什么 Vue.js 不

这篇文章主要讲解了“vue.js的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue.js的注意事项有哪些”吧!

1、为什么 Vue.js 不使用 ES Classes 的方式编写组件

如果你使用过类似于 angular框架或者某些后端 OOP 语言后,那么你的***个问题可能是:为什么不使用 Class 形式的组件?

Vue.js 的作者在 GitHub issues 中很好的回答了这个问题:

Use standard JS classes instead of custom syntax?

为什么不使用 Class 这里有三个很重要的原因:

ES Classes 不能够满足当前 Vue.js 的需求,ES Classes 标准还没有完全规范化,并且总是朝着错误的方向发展。如果 Classes  的私有属性和装饰器(当前已进入 Stage 3)稳定后,可能会有一定帮助。

ES Classes 只适合于那些熟悉面向对象语言的人,它对哪些不使用复杂构建工具和编译器的人不够友好。

优秀的 UI 组件层次结构一般都是组件的横向组合,它并不是基于继承的层次结构。而 Classes 形式显然更擅长的是后者。

译者注:But,Vue.js 3.0 将支持基于 Class 的组件写法,真香。

2、如何构建自己的抽象组件?

如果你想构建自己的抽象组件(比如 transition、keep-alive),这是一个比构建大型 WEB  应用更加疯狂地想法,这里有一些关于这个问题的讨论,但是并没有什么进展。

Any plan for docs of abstract components?

译者注:在 Vue.js 内部组件(transition、keep-alive)中,使用了一个 abstract  属性,用于声明抽象组件,这个属性作者并不打算开放给大家使用,所以文档也没有提及。但是如果你要使用也是可以的,那么你必须深入源码探索该属性有何作用。

但是不要害怕,如果你可以很好地理解 slots ,你就可以构建自己的抽象组件了。这里有一篇很好的博客介绍了要如何做到这一点。

Writing Abstract Components with Vue.js

译者注:下面是《在 Vue.js 中构建抽象组件》的简单翻译

抽象组件与普通组件一样,只是它不会在界面上显示任何 DOM 元素。它们只是为现有组件添加额外的行为。

就像很多你已经熟悉的 Vue.js 的内置组件,比如:``、``、``。

现在展示一个案例,如何跟踪一个 DOM 已经进入了可视区域 ,让我们使用 IntersectionObserver api  来实现一个解决这个问题的抽象组件。

(完整代码在这里:[vue-intersect](https://github.com/heavyy/vue-intersect))

// IntersectionObserver.vue export default {   // 在 Vue 中启用抽象组件   // 此属性不在官方文档中, 可能随时发生更改,但是我们的组件必须使用它   abstract: true,   // 重新实现一个 render 函数   render() {     // 我们不需要任何包裹的元素,只需要返回子组件即可     try {       return this.$slots.default[0];     } catch (e) {       throw new Error('IntersectionObserver.vue can only render one, and exactly one child component.');     }      return null;   },   mounted () {     // 创建一个 IntersectionObserver 实例     this.observer = new IntersectionObserver((entries) => {       this.$emit(entries[0].isIntersecting ? 'intersect-enter' : 'intersect-leave', [entries[0]]);     });      // 需要等待下一个事件队列,保证子元素已经渲染     this.$nextTick(() => {       this.observer.observe(this.$slots.default[0].elm);     });   },   destroyed() {     // 确保组件移除时,IntersectionObserver 实例也会停止监听     this.observer.disconnect();   } }

让我们看看如何使用它?

<intersection-observer @intersect-enter="handleEnter" @intersect-leave="handleLeave">   <my-honest-to-Goodness-component></my-honest-to-goodness-component> </intersection-observer>

但是在这样做之前,请你三思。我们一般依赖 mixins 和一些纯函数来解决一些特殊场景的问题,你可以将 mixins 直接看做一个抽象组件。

How do I extend another VueJS component in a single-file component? (es6  vue-loader)

3、我不太喜欢 Vue.js 的单文件组件,我更希望 HTML、CSS 和 JavaScript 分离。

没有人阻止你这样做,如果你是个注重分离的哲学家,喜欢把不同的东西放在不同文件,或者讨厌编辑器对 .vue  文件的不稳定行为,那么你这么做也是可以的。你要做的很简单:

<!--Https://vuejs.org/v2/guide/single-file-components.html --> <!-- my-component.vue --> <template src="./my-component.html"></template> <script src="./my-component.js"></script> <style src="./my-component.CSS"></style>

这么做,就会出现下一个问题:我的组件总是需要 4 个文件(vue + html + css + js)吗?我能不能摆脱 .vue 文件?  答案是肯定的,你可以使用 vue-template-loader。

我的同事还为此写了一篇很棒的教程

Using vue-template-loader with Vue.js to Compile HTML Templates

4、 函数式组件

感谢 React.js 让函数式组件很流行,这是因为他们无状态、易于测试。然而它们也存在一些问题。

译者注:不了解 Vue.js 函数式组件的可以先在官方文档查看:官方文档

4.1 为什么我不能对功能组件使用基于 Class 的 @Component 装饰器?

再次回到 Classes,它只是一种用于保存本地状态的数据结构。如果函数式组件是无状态的,那么使用 @Component 装饰器就是无意义的。

这里有关于这个的讨论:

How to create functional component in @Component?

4.2 外部类和样式不应用于函数式组件

函数式组件不能像普通组件那样,绑定具体的类和样式,必须在 render 函数中手动应用这些绑定。

DOM class attribute not rendered properly with functional components

class attribute ignored on functional components

4.3 函数式组件总是会重复渲染?

TLDR:在函数式组件中使用有状态组件时务必要小心

Functional components are re-rendered when props are unchanged.

函数式组件相当于直接调用组件的 Render 函数,这意味着你应该:

避免在 render 函数中直接使用有状态组件,因为这会在每次调用 render 函数时创建不同的组件实例。

如果函数式组件是叶子组件,会更好地利用它们。 需要注意的是,同样的行为也适用于 React.js。

4.4 如何在Vue.js 函数式组件中触发一个事件?

在从函数式组件中触发一个事件并不简单。不幸的是,文档中也没有提到这一点。函数式组件中不可用 $emit 方法。stack overflow  上有人讨论过这个问题:

How to emit an event from Vue.js Functional component?

5、Vue.js 的透明包裹组件

组件包裹一些DOM元素,并且公开了这些DOM元素的事件,而不是根DOM的节点实例。

例如:

<!-- Wrapper component for input --> <template>     <div class="wrapper-comp">         <label>My Label</label>         <input @focus="$emit('focus')" type="text"/>     </div> </template>

这里我们真正感兴趣的是 input 节点,而不是 div 根节点,因为它主要是为了样式和修饰而添加的。用户可能对这个组件的几个输入事件感兴趣,比如  blur、focus、click、hover等等。这意味着我们必须重新绑定每个事件。我们的组件如下所示。

<!-- Wrapper component for input --> <template>     <div class="wrapper-comp">         <label>My Label</label>         <input type="text"             @focus="$emit('focus')"             @click="$emit('click')"             @blur="$emit('blur')"             @hover="$emit('hover')"         />     </div> </template>

实际上这是完全没必要的。简单的解决方案是使用 Vue 实例上的属性 vm.$listeners 将事件重新绑定到所需DOM 元素上:

<!-- Notice the use of $listeners --> <template>     <div class="wrapper-comp">         <label>My Label</label>         <input v-on="$listeners" type="text"/>     </div> </template> <!-- Uses: @focus event will bind to internal input element --> <custom-input @focus="onFocus"></custom-input>

6、为什么你不能在 slot 上绑定和触发事件

我经常看到有些开发人员,在 slot 上进行事件的监听和分发,这是不可能的。

组件的 slot  由调用它的父组件提供,这意味着所有事件都应该与父组件相关联。尝试去倾听这些变化意味着你的父子组件是紧密耦合的,不过有另一种方法可以做到这一点,Evan  You解释得很好:

Is it possible to emit event from component inside slot #4332

Suggestion: v-on on slots

7、slot 中的 slot(访问孙辈slot)

在某些时候,可能会遇到这种情况。假设有一个组件,比如 A ,它接受一些 slot 。遵循组合的原则,使用组件 A 构建另一个组件 B 。然后你把 B 用在  C 中。

那么现在问题来了: 如何将 slot 从 C 组件传递到 A 组件?

要回答这个问题,首先取决你使用何种方式构建组件? 如果你是用 render 函数,那就很简单。你只需要在组件 B 的 render  函数中进行如下操作:

// Render function for component B function render(h) {     return h('component-a', {         // Passing slots as they are to component A         scopedSlot: this.$scopedSlots     } }

但是,如果你使用的是基于模板的方式,那么就有些糟糕了。幸运的是,在这个问题上有了进展:

feat(core): support passing down scopedSlots with v-bind

感谢各位的阅读,以上就是“Vue.js的注意事项有哪些”的内容了,经过本文的学习后,相信大家对Vue.js的注意事项有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Vue.js的注意事项有哪些

本文链接: https://www.lsjlt.com/news/85578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue.js的注意事项有哪些
    这篇文章主要讲解了“Vue.js的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue.js的注意事项有哪些”吧!1、为什么 Vue.js 不...
    99+
    2024-04-02
  • jQuery.get的注意事项有哪些
    这篇文章主要讲解了“jQuery.get的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jQuery.get的注意事项有哪些”吧!   Ad...
    99+
    2024-04-02
  • jQuery.ajax注意事项有哪些
    这篇文章主要为大家展示了“jQuery.ajax注意事项有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery.ajax注意事项有哪些”这篇文章吧。 ...
    99+
    2024-04-02
  • ajaxStop()注意事项有哪些
    小编给大家分享一下ajaxStop()注意事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   .ajaxStop()...
    99+
    2024-04-02
  • ajaxSend()注意事项有哪些
    这篇文章主要介绍ajaxSend()注意事项有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   无论哪一个Ajax请求被发送,所有ajaxSend处理器都将被执行。如果我们必...
    99+
    2024-04-02
  • spring事务的注意事项有哪些
    spring事务的注意事项有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  事务一般是指数据库事务,是指作为一个程序执行单元执行的一...
    99+
    2024-04-02
  • 租用的注意事项有哪些
    香港虚拟云主机租用的注意事项:1. 选择稳定性好的香港云主机,保证最佳的访问速度,有利于搜索引擎的优化,提高网站的排名。2. 货比三家,租用性价比高的云主机,降低成本消耗。3. 注意售后服务,选择能够保障提供良好售后的服务商,提供及时的技术...
    99+
    2024-04-02
  • 建站有哪些注意事项
    本篇内容主要讲解“建站有哪些注意事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“建站有哪些注意事项”吧!  医疗行业作为一个特殊、敏感的行业,做好网站建设是一件很不容易的事情。随着互联网的高速...
    99+
    2023-06-10
  • jQuery.post使用的注意事项有哪些
    本篇内容介绍了“jQuery.post使用的注意事项有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • java遍历的注意事项有哪些
    1. 确保正确设置起始条件和结束条件。2. 注意遍历顺序,遵循先进先出的原则。3. 确保遍历过程中不会出现越界或空指针异常。4. 遍...
    99+
    2023-09-27
    java
  • sql求和的注意事项有哪些
    在使用SQL进行求和操作时,需要注意以下几点: 确保对正确的列进行求和操作,避免对不需要求和的列进行操作。 确保对数据类型兼容的列...
    99+
    2024-03-05
    sql
  • PHP5到PHP7的注意事项有哪些
    这篇文章给大家分享的是有关PHP5到PHP7的注意事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP7是大势所趋了。PHP7有更多的新特性,更好的性能,更高的速度。并且,从今年8月7日开始发行PHP7...
    99+
    2023-06-15
  • innodb使用的注意事项有哪些
    使用InnoDB引擎时,有一些注意事项需要注意:1. 适当设置InnoDB缓冲池大小:InnoDB使用缓冲池来缓存数据和索引,因此设...
    99+
    2023-09-15
    innodb
  • Arrays.sort()使用的注意事项有哪些
    这篇文章主要讲解了“Arrays.sort()使用的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Arrays.sort()使用的注意事项有哪些”吧!Arrays.sort()...
    99+
    2023-06-30
  • class命名注意的事项有哪些
    这篇“class命名注意的事项有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“clas...
    99+
    2024-04-02
  • angularJS开发注意事项有哪些
    这篇文章主要为大家展示了“angularJS开发注意事项有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angularJS开发注意事项有哪些”这篇文章吧。1...
    99+
    2024-04-02
  • css书写注意事项有哪些
    这篇文章主要为大家展示了“css书写注意事项有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css书写注意事项有哪些”这篇文章吧。css书写注意事项一律小写...
    99+
    2024-04-02
  • Java集合注意事项有哪些
    今天小编给大家分享一下Java集合注意事项有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Map 接口1、注意事项(...
    99+
    2023-06-30
  • MYSQL  group by 有哪些注意事项
    目录1.group by 后面不能加 where2.having 或 group by 可单独使用3.having 和 group by 可使用别名为什...
    99+
    2024-04-02
  • 新建ASP.NET注意事项有哪些
    本篇内容主要讲解“新建ASP.NET注意事项有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“新建ASP.NET注意事项有哪些”吧!你可能已经用惯了使用VS 新建一个ASP.NET , VS ...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作