Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue:计算属性

Vue:计算属性

作者头像
姓王者
发布于 2024-10-31 10:47:40
发布于 2024-10-31 10:47:40
15400
代码可运行
举报
文章被收录于专栏:姓王者的博客姓王者的博客
运行总次数:0
代码可运行

我们为什么需要计算属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
全名:<span>{{firstName + '-' + lastName}}</span><br>

vue官方不建议我们在模板这么写,这看起来过于 复杂

示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

<template>
    <div class="person">
        姓:<input  type="text" v-model="firstName"> <br>   
        名:<input type="text" v-model="lastName"> <br>
        全名:<span>{{fullName}}</span><br>
        <button @click="changeName">修改姓名</button>
        <!-- 全名 <span>{{firstName}}-{{lastName}}</span> <br> -->
    </div>
</template>


<script setup   lang="ts" name="Personsss">
import {computed, ref} from 'vue'
let firstName= ref('章');
let lastName = ref('礼');
let fullName =computed(
()=>firstName.value.slice(0,1).toUpperCase()+firstName.value.slice(1)+lastName.value
);

</script>

首先我们需要导入computed 然后使用这个计算属性定义fullName 通过这个方法,使得模板变得简易,可读性变高

计算属性默认只可读

事实上如果我在里面定义一个函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function changeName(){
fullName.value='李四'
}

这个changeName函数会报错 无法为“value”赋值,因为它是只读属性。 这是计算属性的只读特性

如何修改?

如果想要修改计算属性的值,我们需要getset方法

例如 来自于vue官方文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script setup>
import { ref, computed } from 'vue'

const firstName = ref('John')
const lastName = ref('Doe')

const fullName = computed({
  // getter
  get() {
    return firstName.value + ' ' + lastName.value
  },
  // setter
  set(newValue) {
    // 注意:我们这里使用的是解构赋值语法
    [firstName.value, lastName.value] = newValue.split(' ')
  }
})
</script>

你发现了吗,这种修改本质上还是修改了firstNamelastName,那我们不禁想到,为什么我们不直接修改这两个的值,来实现通过计算属性更新fullName的值呢?

官方推荐

正如官方文档所言 避免直接修改计算属性值​ 从计算属性返回的值是派生状态。可以把它看作是一个“临时快照”,每当源状态发生变化时,就会创建一个新的快照。更改快照是没有意义的,因此计算属性的返回值应该被视为只读的,并且永远不应该被更改——应该更新它所依赖的源状态以触发新的计算。

所以,这种只读属性是必然的,我们完全可以通过修改那两个值实现计算属性的值的更新!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
计算属性的基本操作和复杂操作
FGGIT
2024/10/15
1120
Vue学习3:计算属性computed与监听器
下面是计算属性相关代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>vue3</title> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <!--<link rel="stylesheet" type="text/css" href="main.
用户1149564
2018/05/28
5420
Vue3 组合式 API 的特性、用法和最佳实践
Vue3 是一种流行的 JavaScript 框架,它引入了全新的组合式 API,在开发大型和复杂的应用程序时提供了更灵活和强大的工具。本文将详细介绍 Vue3 组合式 API 的特性、用法和最佳实践。
网络技术联盟站
2023/07/05
1K0
VUE基础入门使用教程
第一个Vue程序 .html <!--view层 ${} 变成了一个模板--> <div id="app"> <ul> <li><span v-bind:title="m">鼠标悬停几秒查看此处动态绑定的提示信息!</span> </li> <li>{{name}}</li> <li>{{tit.name}}</li> </ul> <a v-bind:href="tit.url">b站链接</a> </div> .scrip
JanYork_简昀
2022/05/18
4560
Vue之计算属性
--', newValue); const names = newValue.split(' '); this.firstName = names[0]; this.lastName = names[1]; }, get: function () { return this.firstName + ' ' + this.lastName } },
yuanshuai
2022/08/22
6100
Vue之计算属性
前端二面vue面试题总结_2023-03-01
在 Vue3.0 中变量必须 return 出来, template 中才能使用;而在 Vue3.2 中只需要在 script 标签上加上 setup 属性,无需 return, template 便可直接使用,非常的香啊!
用户10377014
2023/03/01
8180
一、Vue2笔记--基础篇--09-监视属性
==================== 监视属性的属性方法 ======================
打不着的大喇叭
2024/03/11
1030
一、Vue2笔记--基础篇--09-监视属性
Vue2.v-指令
上面代码中score上面的click也是可以触发的,不必是按钮。 如果不加this,访问的是全局变量。 可以调用传参。
WuShF
2024/01/10
1680
Vue2.v-指令
10天从入门到精通Vue(四)Vue中的路由指南
考虑一个问题:想要实现 名 和 姓 两个文本框的内容改变,则全名的文本框中的值也跟着改变;
共饮一杯无
2022/11/28
5540
10天从入门到精通Vue(四)Vue中的路由指南
Vue前端篇——Vue 3中的计算属性(computed)
在Vue 3中,计算属性提供了一种高效的方式来处理数据计算,尤其是当计算结果依赖于多个响应式数据时。与之相比,直接在模板中进行计算可能会导致性能问题和不必要的重复计算。
小明爱吃火锅
2024/07/26
2.5K0
vue学习笔记3
什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可; 组件化和模块化的不同:
用户6362579
2019/09/29
7900
Vue专题 01_计算属性vs监听(侦听)属性
对于初学者来说,学到计算属性和监听(侦听)属性这里很容易犯晕,搞不懂这两者之前的区别和什么时候该使用哪个,这里Dapan就来尝试梳理一下计算属性(computed)和监视(侦听)属性(watch)的区别,以及该选择使用哪一个:
用户9999906
2022/09/26
5240
2020年,vue面试遇到的问题(上)
原文有 36 到 vue 常用面试题,考虑到太多一次也看不完,所以分为 上、中、下三篇,如果你能读完这三篇文章,相信你在面试中 vue 的问题你不会怕了。
桃翁
2020/03/13
2K0
vue学习笔记4
考虑一个问题:想要实现 名 和 姓 两个文本框的内容改变,则全名的文本框中的值也跟着改变;(用以前的知识如何实现???)
用户6362579
2019/09/29
6370
Vue专题 02_计算属性(computed) VS 方法(methods)
两种方式的最终结果都是完全相同的(这里解释一下为什么会相同:当计算属性所依赖的数据发生改变时,计算属性会重新调用;当data中的任何一个数据发生变化时,Vue的模板都会重新解析一遍(Vue都会拿过来模板整体再阅读一遍),所以方法也被调用了一次)
用户9999906
2022/09/26
4180
京东前端高频vue面试题
通俗点理解就是,vuex 弱化 dispatch,通过commit进行 store状态的一次更变;取消了action概念,不必传入特定的 action形式进行指定变更;弱化reducer,基于commit参数直接对数据进行转变,使得框架更加简易;
bb_xiaxia1998
2022/12/19
1.3K0
计算属性是如何被Vue实现的
无论是面试过程还是日常业务开发,相信大多数前端开发者对于 Vue 的应用已经熟能生巧了。
19组清风
2022/09/27
8910
计算属性是如何被Vue实现的
vue基础(四)
什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可; 组件化和模块化的不同: + 模块化: 是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一; + 组件化: 是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用;
不愿意做鱼的小鲸鱼
2022/09/24
1.9K0
vue基础(四)
常见经典vue面试题(面试必问)
如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。key 是为 Vue 中 vnode 的唯一标记,通过这个 key,我们的 diff 操作可以更准确、更快速
bb_xiaxia1998
2022/12/14
1K0
vue3 day03
reactive对比ref 从定义角度对比 ref用来定义:基本数据类型 reactive用来定义: 对象(或数组)类型数据 备注: ref也可以用来定义对象(或数组)类型数据,它内部会自动通过reactive转为代理对象 从原理角度来对比 ref使用了是Object.defineProperty()的get和set来实现响应式(数据劫持) reactive使用了es6的proxy来实现响应式(数据劫持),并通过Reflect操作源对象内部的数据 从使用角度对比 ref定义的数据: 操作数据时需要使用.va
花花522
2023/03/07
2330
vue3 day03
相关推荐
计算属性的基本操作和复杂操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验