vue中的computed,vue中使用typescript
这篇文章主要介绍了某视频剪辑软件打字稿中处理计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
目录
什么是计算的的用途在以打字打的文件怎么用另一种方案某视频剪辑软件计算值正确使用方式计算的或方法计算的或观察的
什么是computed
「计算出来的」是某视频剪辑软件中提供的一个计算属性。它被混入到某视频剪辑软件实例中,所有的吸气剂和作曲者的这上下文自动的绑定为某视频剪辑软件实例。计算属性的结果会被缓存,除非依赖的响应式财产变化才会从新计算。
computed的用途
我们可以使用「计算出来的」对已有的属性数据进行加工处理,得到我们的目标数据。
在TypeScript怎么用
在「vue级组件」中分别为道具,看等提供了对应的装饰器,而「计算出来的」却没有对应的装饰器提供。
在官网的实例中「计算出来的」的功能是通过「得到」实现的。
模板
输入垂直模型=名称
/模板
脚本
从“vue”导入某视频剪辑软件
从" vue-类别-组件"导入组件
@组件
导出默认类编译扩展Vue {
名字=约翰
lastName=Doe
//声明为计算属性吸气剂
get name() {
返回this.firstName this.lastName
}
//声明为计算属性作曲者
集合名称(值){
const splitted=value.split( )
this.firstName=splitted[0]
这个。last name=splitd[1]
}
}
/脚本
另一种方案
在实际项目中,将组件修改为以打字打的文件后,使用得到实现计算属性,浏览器控制台提示数据是非响应式的,数据无法显示。组件射流研究…版
模板
埃尔-表格边框:data= data style= width:100%;height= 400 @ selection-change=选择更改
埃尔-表格-列类型=选择宽度= 55 /El-表格-列
El-table-column prop= code label=编码/El-表格-列
El-table-column prop= name label=名称/El-表格-列
/el-table
/模板
脚本
导出默认值{
名称:层次结构-表,
道具:{
值:{
类型:数组,
必填:真
},
跳过代码:{
类型:数组
}
},
data() {
返回{
};
},
计算值:{
data() {
返回这个skipCodes?this.value.filter(it=!这个。跳过代码。包括(它。码)):这个。价值;
}
},
方法:{
选择更改(选择){
这个$emit(选择-更改,选择);
}
}
};
/脚本
鉴于这个问题,使用创建中间变量的方式进行解决。组件分时(同分时)版
模板
埃尔-表格边框:data= data style= width:100%;height= 400 @ selection-change=选择更改
埃尔-表格-列类型=选择宽度= 55 /El-表格-列
El-table-column prop= code label=编码/El-表格-列
El-table-column prop= name label=名称/El-表格-列
/el-table
/模板
脚本语言
从" vue-属性-装饰"导入{组件,道具,Vue,手表};
@组件
导出默认类层次表扩展Vue {
data:any[]=[];
@Prop({ type: Array,required: true })值!任何;
@ Prop({ type:Array })跳过代码:any
@手表(值)
valueChanged(val) {
这个。update data();
}
@Watch(skipCodes )
skipCodesChanged() {
这个。update data();
}
updateData() {
this.data=this.skipCodes?this.value.filter(it=!这个。跳过代码。包括(它。码)):这个。价值;
}
选择更改(选择){
这个$emit(选择-更改,选择);
}
}
/脚本
样式范围/样式
vue computed正确使用方式
最近面试中,遇到一个小伙子,谈到了某视频剪辑软件中的计算和看区别,最后得到了一个让我瞠目结舌的答案,只用看着,从不用计算
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护,所以,对于复杂逻辑,vue提倡使用计算属性。需要特别说明:计算属性的 getter 函数是没有副作用 (side effect) 的,这使它更易于测试和理解—来自某视频剪辑软件计算属性
在讨论computed和watch之间的区别之前,让我们看一下computed和methods之间的区别。
computed or methods
理论上,computed的所有实现都可以被方法完全取代。
以前的消息:“{ { reversed message()} }”/p
以前的消息:“{ { reversed message } }”/p
//计算属性
计算值:{
reversedMessage () {
返回this.message.split( )。反转()。联接(“”)
}
}
//方法
方法:{
reversedMessage: function () {
返回this.message.split( )。反转()。联接(“”)
}
}
计算属性是基于它们的响应式依赖进行缓存的。只有当相关的响应相关性发生变化时,才会对它们进行重新评估。这意味着只要消息没有改变,多次访问reversedMessage计算属性将立即返回以前的计算结果,而不必再次执行该函数。相反,方法会执行。
这也意味着以下计算属性将不会更新,因为Date.now()不是响应依赖项:
计算值:{
now: function () {
返回日期.现在()
}
}
为什么我们需要缓存?假设我们有一个高性能成本的计算属性A,需要遍历一个巨大的数组,做大量的计算。那么我们可能有其他依赖于A的计算属性。如果没有缓存,我们必然会多次执行A的getter!如果你不希望有缓存,请用方法来替代。
相同之处:计算和方法将混合到Vue实例中。VM。ReversedMessage/VMReversedMessage()可以获取相关的计算属性/方法。
接下来,computed和watch有什么区别?
computed or watch
Vue提供了一种更通用的方法来观察和响应Vue实例上的数据变化:监听属性。当你有一些数据需要和其他数据一起变化的时候,很容易滥用watch。但是,通常最好使用计算属性,而不是命令式监视回调。
当数据更改时需要执行异步或开销较大的操作时,监视模式最有用。它允许我们执行一个异步操作(访问一个API),限制这个操作的频率,并在得到最终结果之前设置中间状态。这些都是计算属性做不到的。
方法:{
getAnswer: function () {
this.answer=思考.
var vm=this
axios.get(https://yesno.wtf/api )。然后(函数(响应){
vm.answer=_。大写(response.data.answer)
})。catch(函数(错误){
vm.answer=错误!无法访问API。错误
})
}
},
已创建:函数(){
//去抖弹跳功能
this.debouncedGetAnswer=_。去抖(this.getAnswer,500)
}
这样,手表就可以完全取代computed了?什么情况下只能用computed?
回想一下computed最大的特点是缓存,那么上面的问题可以转化为:在哪些情况下我们需要依赖缓存?
示例:父组件给子组件传值,值的类型为引用类型
父组件
模板
差异
child :user=user/child
=用户父代的标签:/label
输入id= user type= text v-model= user . name
/div
/模板
脚本
从导入子级。/child.vue
导出默认值{
data () {
返回{
用户:{姓名:李刚 }
}
},
组件:{ Child }
}
/脚本
组件
模板
divchild: {{user}}/div
/模板
脚本
导出默认值{
姓名:孩子,
道具:[用户]
}
/脚本
现在需要在子组件中显示更改前后的值。
如此简单,只需在手表中保存oldVal。
模板
差异
divchild:/div
div修改前:{{oldUser}}修改后:{{user}}/div
/div
/模板
脚本
导出默认值{
姓名:孩子,
道具:[用户],
data () {
返回{
旧用户:{}
}
},
观察:{
用户:{
处理程序(val,oldVal) {
this.oldUser=oldVal val
},
深:真的,
即时:正确
}
}
}
/脚本
查结果,WTF,什么情况~ ~
问题是user是引用类型,watch没有缓存,所以修改的是同一个对象。所以,* **val===olVal在手表方法中是真的!**
如何达到要求?这里,我们可以借用计算缓存的特性来完成上述情况。
属性的计算结果将被缓存,并且不会重新计算,除非相关的响应属性发生更改。请注意,如果依赖项(例如非响应属性)超出了此实例的范围,则计算属性将从010更新为59000。— vue计算api
模板
差异
divchild:/div
div修改前:{{oldUser}}修改后:{{user}}/div
/div
/模板
脚本
导出默认值{
姓名:孩子,
道具:[用户],
data () {
返回{
旧用户:{}
}
},
//缓存用户信息
计算值:{
userInfo () {
返回{.this.user }
}
},
观察:{
用户信息:{
处理程序(val,oldVal) {
this.oldUser=oldVal val
},
深:真的,
即时:正确
}
}
}
/脚本
注意:{.this.user}或使用Object.assign({},this.user)创建新的引用!
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。