Vue 3 避坑指南(六):使用事件还是函数
Vue 3 使用 v-on
指令表示事件。我们知道 React 中没有事件的,它只有属性的概念。事件是通过函数属性表示的,也就是“回调函数”。既然这样,同样的一个效果,在 Vue 3 中既可以使用事件实现,也可以使用函数属性实现,在实际开发中我们应该怎么抉择呢?
Vue 3 使用 v-on
指令表示事件。我们知道 React 中没有事件的,它只有属性的概念。事件是通过函数属性表示的,也就是“回调函数”。既然这样,同样的一个效果,在 Vue 3 中既可以使用事件实现,也可以使用函数属性实现,在实际开发中我们应该怎么抉择呢?
众所周知,相比于 Vue 2,Vue 3 对于 TypeScript 的支持更加完善;但是,依然有一些不够完善的地方。至于有哪些不完善的地方,也不是一下就能说得出来,好像插槽算一个。不管哪一个,对范型组件缺乏支持是它逃不掉的一点。
我们在使用 UI 组件库的时候,像 Select、List 这样的组件,它们天然地不支持范型。这会让你在编写代码时丢失一些必要的类型信息。
这几篇写的都是有关于 watch 监听的,殊不知计算属性也有监听的味道在里面。类似于 watchEffect,计算属性会自动计算依赖,并依据依赖变化自动更新变量值。
1 | const firstName = ref('') |
接下来通过一个菜单组件的例子,介绍计算属性的浅监听可能带来的问题,以及如何克服这样的问题。但文章最后还是提出一个困扰,关于 Vue 提供的深度监听的特性和函数式思维的抉择是我们开发上的一个难点。
watch
通常只能监听值的改变,也就是我们平常所说的“浅”监听。如果要监听深层次的属性,需要加一个选项 deep: true
. 但这时,如果监听的变量本身值的改变,和内部属性值的改变,都会触发监听函数。如果我们要区分这两种情况,需要用到一些手段。
本文通过一个路由和变量绑定的案例介绍 watchEffect
的使用技巧、限制和注意事项。我们将知道应当在数据就绪后再参与监听,watch
比 watchEffect
高级应当始终使用 watch
即可。
当组件需要响应路由更新的时候,有人提到可以用 watch(route)
方法。这个方法可以监听路由的一切变化。比如,对于一个文章组件,我们可以通过监听路由来达到重新获取文章的目的:
1 | // 监听路由的变化。当我们的路由从 `/articles/1` 跳转到 `/articles/2` 时,下面的执行逻辑是正确的。 |
但是,请千万别这么用。此时组件不仅监听了当前组件路由的变化,也监听了别的组件的路由变化。当路由跳转到不属于当前组件的路由时,上述 watch
响应可能会触发,从而导致错误的执行逻辑:
1 | watch(route, async () => { |
所以,请避免使用 watch(route)
,因为它可能会监听到不属于自身的路由变化。
现实中为 Rails 添加参数验证的 Gems 很多,添加 Swagger 文档生成的也不少,但能够同时支持参数验证、返回值渲染和 Swagger 文档生成的少之又少,而且将这些能力紧密结合在一起的就几乎没有了。
大家伙在团队开发中,是否会有过这些困惑:
常用的 TODO 标记列举如下(摘自Ruby Coding Style Guides):
使用其他自定义的关键字,如果你认为它是合适的,但是确保在你的项目的 README 或者其他的地方注明。
主流的开放方式分为两种:以前端为主的前后端分离模式和以后端为主的全栈开发模式。Rails(全称 Ruby on Rails)是一个全栈开发框架,自然要用 Ruby 语言做更多的事。我在应用 Rails 实践的过程中,发现它的开发模式并不是有多种,只有一种。这一种,就是“基于模型验证的方式”。