vue 3 学习笔记 (七)——vue3 中 computed 新用法
vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 中的写法,让您快速掌握 vue3 中 computed 的新用法。
组合式 API 中使用 computed 时,需要先引入:import { computed } from "vue"。引入之后 computed 可以传入的参数有两种:回调函数和 options 。具体看看它是如何使用的?
一、函数式写法
在vue2中,computed 写法:
- computed:{
- sum(){
- return this.num1+ this.num2
- }
- }
在vue3 如果使用选项式API也可以这样写,主要看下组合式API的使用。
示例1:求和
- import { ref, computed } from "vue"
- export default{
- setup(){
- const num1 = ref(1)
- const num2 = ref(1)
- let sum = computed(()=>{
- return num1.value + num2.value
- })
- }
- }
调用 computed 时, 传入了一个箭头函数,返回值作为 sum 。相比之前,使用更加简单了。如果需要计算多个属性值,直接调用就可以。如:
- let sum = computed(()=>{
- return num1.value + num2.value
- })
- let mul = computed(()=>{
- return num1.value * num2.value
- })
该示例过于简单,看不明白的可在文章后面阅读完整实例1。
二、options 写法
计算属性默认只有 getter ,在需要的时候也可以提供 setter 。在vue2中用法如下:
- computed:{
- mul:{
- get(){ // num1值改变时触发
- return this.num1 * 10
- },
- set(value){ // mul值被改变时触发
- this.num1 = value /10
- }
- }
- }
mul 属性是 给num1 放大10,如果修改 mul 的值,则 num1 也随之改变。
在 vue3 中 :
- let mul = computed({
- get:()=>{
- return num1.value *10
- },
- set:(value)=>{
- return num1.value = value/10
- }
- })
这两种写法不太一样,仔细观察区别不大,get 和 set 调用也是一样的。
在此示例中代码简单,如果没太理解,可查看文章后面的完整实例2。
完整实例1:
- <template>
- <div>
- {{num1}} + {{num2}} = {{sum}}
- <br>
- <button @click="num1++">num1自加</button>
- <button @click="num2++">num2自加</button>
- </div>
- </template>
- <script>
- import { ref, computed } from "vue"
- export default{
- setup(){
- const num1 = ref(1)
- const num2 = ref(1)
- let sum = computed(()=>{
- return num1.value + num2.value
- })
- return{
- num1,
- num2,
- sum
- }
- }
- }
- </script>
完整实例2:
- <template>
- <div>
- {{num1}} + {{num2}} = {{sum}}<br>
- <button @click="num1++">num1自加</button>
- <button @click="num2++">num2自加</button>
- <br>
- {{num1}} * 10 = {{mul}}
- <button @click="mul=100">改值</button>
- </div>
- </template>
- <script>
- import { ref, computed } from "vue"
- export default{
- setup(){
- const num1 = ref(1)
- const num2 = ref(1)
- let sum = computed(()=>{
- return num1.value + num2.value
- })
- let mul = computed({
- get:()=>{
- return num1.value *10
- },
- set:(value)=>{
- return num1.value = value/10
- }
- })
- return{
- num1,
- num2,
- sum,
- mul
- }
- }
- }
- </script>
三、computed 传参
计算属性需要传入一个参数怎么写呢?
- <template>
- <div>
- <div v-for="(item,index) in arr" :key="index" @click="sltEle(index)">
- {{item}}
- </div>
- </div>
- </template>
- <script>
- import { ref, computed,reactive } from "vue"
- export default{
- setup(){
- const arr = reactive([
- '哈哈','嘿嘿'
- ])
- const sltEle = computed( (index)=>{
- console.log('index',index);
- })
- return{
- arr,sltEle
- }
- }
- }
- </script>
直接这样写,运行的时候,出现错误:Uncaught TypeError: $setup.sltEle is not a function。
原因:
computed 计算属性并没有给定返回值,我们调用的是一个函数,而 computed 内部返回的并不是一个函数,所以就会报错:sltEle is not a function。
解决办法:
需要在计算属性 内部返回一个函数。修改代码如下:
- const sltEle = computed( ()=>{
- return function(index){
- console.log('index',index);
- }
- })
好了小编今天的文章就到此结束了,喜欢我的可以点个关注哦!
vue 3 学习笔记 (七)——vue3 中 computed 新用法的更多相关文章
- vue 3 学习笔记 (六)——watch 、watchEffect 新用法
选项式API与之前写法相同,本篇文章主要通过 Options API 和 Composition API 对比 watch 的使用方法,让您快速掌握 vue3 中 watch 新用法.建议收藏! 一. ...
- STL学习笔记(七) 程序中使用STL
条款43:算法调用优先于手写循环 class Widget { public: bool test(); }; vector<Widget> vec; 算法调用: for_each(vec ...
- 学习笔记3—matlab中load特殊用法
1.在matlab中 ,infro.mat中存有很多子矩阵(比如:mean_FA.mat, mean_e1.mat和 mean_e2.mat),调出某一个矩阵时,命令行为:load([path,'\' ...
- spring in action学习笔记七:@Conditional注解的用法
@Profile注解是@Conditional注解的一个例子.即@Profile也是用@Conditional注解来实现的. 必须让条件实现Condition这个接口. 下面的案例讲如果环境中有mag ...
- Vue.js学习笔记:在元素 和 template 中使用 v-if 指令
f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
随机推荐
- Azure Bicep(三)变量控制
一,引言 当我们在使用 Azure Bicep 的时候会出现以下几个问题: 1)文件中有很多地方会重用很多相同的值 2)输入参数可以在统一的地方进行修改 带着这些问题,我们开始今天的内容,学习如何在 ...
- Java(4)运算符及表达式
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201675.html 博客主页:https://www.cnblogs.com/testero ...
- 如何在印刷品中使用遵循SIL Open Font License协议的字体
如何在印刷品中使用遵循SIL Open Font License协议的字体 昨天在知乎看到了一个问题,( 如何在设计中声明字体开源许可证? - 知乎 (zhihu.com),恰好最近在研究一些开源协议 ...
- 【UE4 C++】 UnrealPak 与 Pak 的制作、挂载、加载
简介 通过 UnrealPak,可以将资源打包成 Pak 文件 Pak文件是UE4游戏生成的数据包文件. Pak 之前一般先有 Cooked 步骤,将资源烘焙为对应平台支持的资源 一般打包后的项目使用 ...
- Scrum Meeting 0529
零.说明 日期:2021-5-29 任务:简要汇报七日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 七日内已完成的任务 后两日计划完成的任务 困难 qsy PM&前端 完成后端管 ...
- 【技术博客】在Unity3d中实现烟花效果
在游戏开发中,我们经常需要用到类似烟花的效果.在Unity3d中,实现烟花效果的方法不止一种,我选用了Unity3d中新添加的粒子特效工具--visual effect graph来进行实现. 实现过 ...
- docker multi-stage 多阶段构建
多阶段构建 一.需求 二.普通构建 1.编写Dockerfile 2.构建镜像 三.多阶段(multi-stage)构建 1.编写Dockerfile 2.构建镜像 四.比较2个镜像的体积大小 我们在 ...
- CSP踩被记
本来想起个清新脱俗的标题,但碍于语文功底不行,于是光明正大嫖了LiBoyi的高端创意,把这篇博客命名为踩被记. Day -6 用假暴力把真正解拍没了,伤心.Rp有点低 Day -4 信息学考,\(py ...
- Spring Security:如何在Postman中优雅地测试后端API(前后端分离)
前言 在Postman中可以编写和执行自动化测试,使用 JavaScript 编写基本的 API 测试,自由编写任何用于自动化测试的测试方案. 在POSTMAN中读取Cookie值 1. 我们需要向& ...
- cat userlist(课上练习)
问题描述 Linux文件系统的三层抽象是什么? 写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意. 假设块大小为4k, userlist的大小不小于10k,自己假设 ...