Vue.js的注意事项与技巧(2)
让我们看看如何使用它?
但是在这样做之前,请你三思。我们一般依赖 mixins 和一些纯函数来解决一些特殊场景的问题,你可以将 mixins 直接看做一个抽象组件。 How do I extend another VueJS component in a single-file component? (ES6 vue-loader) 3、我不太喜欢 Vue.js 的单文件组件,我更希望 HTML、CSS 和 JavaScript 分离。 没有人阻止你这样做,如果你是个注重分离的哲学家,喜欢把不同的东西放在不同文件,或者讨厌编辑器对 .vue 文件的不稳定行为,那么你这么做也是可以的。你要做的很简单:
这么做,就会出现下一个问题:我的组件总是需要 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的节点实例。 例如:
这里我们真正感兴趣的是 input 节点,而不是 div 根节点,因为它主要是为了样式和修饰而添加的。用户可能对这个组件的几个输入事件感兴趣,比如 blur、focus、click、hover等等。这意味着我们必须重新绑定每个事件。我们的组件如下所示。
(编辑:ASP站长网) |