美文网首页
VUE3参数基础

VUE3参数基础

作者: Prince_0716 | 来源:发表于2022-03-05 16:58 被阅读0次

动态参数

也可以在指令参数中使用 JavaScript 表达式,方法是用方括号括起来:

<!--
注意,参数表达式的写法存在一些约束,如之后的“对动态参数表达式的约束”章节所述。
-->
<a v-bind:[attributeName]="url"> ... </a>

这里的 attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的组件实例有一个 data property attributeName,其值为 "href",那么这个绑定将等价于 v-bind:href

同样地,你可以使用动态参数为一个动态的事件名绑定处理函数:

<a v-on:[eventName]="doSomething"> ... </a>

在这个示例中,当 eventName 的值为 "focus" 时,v-on:[eventName] 将等价于 v-on:focus

修饰符

修饰符 (modifier) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

<form v-on:submit.prevent="onSubmit">...</form>

在接下来对 v-onv-for 等功能的探索中,你会看到修饰符的其它例子。

v-bind 缩写

<!-- 完整语法 -->
<a v-bind:href="url"> ... </a>

<!-- 缩写 -->
<a :href="url"> ... </a>

<!-- 动态参数的缩写 -->
<a :[key]="url"> ... </a>

v-on 缩写

<!-- 完整语法 -->
<a v-on:click="doSomething"> ... </a>

<!-- 缩写 -->
<a @click="doSomething"> ... </a>

<!-- 动态参数的缩写 -->
<a @[event]="doSomething"> ... </a>

#注意事项

#对动态参数值约定

动态参数预期会求出一个字符串,null 例外。这个特殊的 null 值可以用于显式地移除绑定。任何其它非字符串类型的值都将会触发一个警告。

#对动态参数表达式约定

动态参数表达式有一些语法约束,因为某些字符,如空格和引号,放在 HTML attribute 名里是无效的。例如:

<!-- 这会触发一个编译警告 -->
<a v-bind:['foo' + bar]="value"> ... </a>

防抖和节流

Vue 没有内置支持防抖和节流,但可以使用 Lodash 等库来实现。

函数防抖(debounce)

短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。

节流(throttle)

指连续触发事件但是在 n 秒中只执行一次函数。即 2n 秒内执行 2 次... 。节流如字面意思,会稀释函数的执行频率。

#计算属性缓存 vs 方法

<p>{{ calculateBooksMessage() }}</p>
// 在组件中
methods: {
  calculateBooksMessage() {
    return this.author.books.length > 0 ? 'Yes' : 'No'
  }
}

我们可以将同样的函数定义为一个方法,而不是一个计算属性。从最终结果来说,这两种实现方式确实是完全相同的。然而,不同的是计算属性将基于它们的响应依赖关系缓存。计算属性只会在相关响应式依赖发生改变时重新求值。这就意味着只要 author.books 还没有发生改变,多次访问 publishedBookMessage 时计算属性会立即返回之前的计算结果,而不必再次执行函数。

这也同样意味着下面的计算属性将永远不会更新,因为 Date.now () 不是响应式依赖:

computed: {
  now() {
    return Date.now()
  }
}

相比之下,每当触发重新渲染时,调用方法将始终会再次执行函数。

我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 list,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 list。如果没有缓存,我们将不可避免的多次执行 list 的 getter!如果你不希望有缓存,请用 method 来替代。

计算属性的 Setter

计算属性默认只有 getter,不过在需要时你也可以提供一个 setter:

// ...
computed: {
  fullName: {
    // getter
    get() {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set(newValue) {
      const names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}
// ...

现在再运行 vm.fullName = 'John Doe' 时,setter 会被调用,vm.firstName 和 vm.lastName 也会相应地被更新。

相关文章

  • VUE3参数基础

    动态参数 也可以在指令参数中使用 JavaScript 表达式,方法是用方括号括起来: 这里的 attribute...

  • vue3

    ~ vue3 的基础 api 有那些 const { createApp, reactive,// 创建响应式数据...

  • vue3使用中VsCode 报 v-model directiv

    最近在写vue3时一直因为vue3中新增的语法v-model:xxx 的写法报警告。以前vue2中没有携带参数的写...

  • 文件隐藏属性(chattr,lsattr)

    chattr + :在原有参数设定基础上,追加参数。- :在原有参数设定基础上,移除参数。= :更新为指定参数设定...

  • Vue3---父子组件间互相传值

    Vue3中,子组件通过setup函数中的第一个参数值 props 拿到定义的组件参数进行使用。如果要向父组件传参,...

  • Vue3新特性:内置组件teleport

    Vue3内置组件teleport 将teleport包裹的元素移动到某个DOM节点下有两个参数to - strin...

  • 抛出自定义事件

    vue3使用emit分发事件,类似于$emit,从setup的第二个参数中解构出emit

  • 文档基础

    Vue3中文文档收获 基础 一.应用&组件实例 1.1.根组件 constRootComponent={/* 选项...

  • 箭头函数

    定义: 语法节 基础语法节(参数1, 参数2, …, 参数N) => { 函数声明 }(参数1, 参数2, …, ...

  • vue3基础

    一、setup setup函数可以被理解为函数的入口 setup函数接收两个参数:props、context(包含...

网友评论

      本文标题:VUE3参数基础

      本文链接:https://www.haomeiwen.com/subject/bpbdrrtx.html