一、原因:一个计算属性,当计算传入的是一个函数,或者传入的是一个对象,而没有设置 setter,也就是 set 属性,当你尝试直接该改变这个这个计算属性的值,都会报这个警告,vuex还会出现通过commit提交修改vuex值的警告的情况。

参考文档:

二、常见导致该错误的写法

(1)计算属性中传入的是对象和方法,直接对计算属性进行赋值会导致错误

比如:

<template>
<div>
<input v-model='change'/>
</div>
</template> <script>
export default {
data () {
return {
a: ''
}
},
computed: {
change () {
return this.a
}
}
}
</script>

结合vuex比如:

<template>
<div>
<input v-model='change'/>
</div>
</template> <script>
export default {
data () {
return {
}
},
computed: {
change () {
return this.$store.state.val
}
}
}
</script>
<template>
<div>
<input v-model='change'/>
</div>
</template> <script>
export default {
data () {
return {
a: ''
}
},
computed: {
...mapState({
// 获取vuex中某个对象的属性值给页面展示用,页面双向绑定也会更新计算属性
change: state => state.object.change
})
}
}
</script>
<template>
<div>
<div @click='change()'>点我</div>
</div>
</template> <script>
export default {
data () {
return { }
},
computed: {
...mapState({
// 获取vuex中某个对象的属性值给页面展示用
change: state => state.object.change
})
},
method: {
change () {
this.change = '赋值'
}
}
}
</script>

三、解决方法

(1)将计算属性转成一个对象,使用getter与setter

   <div>
<input v-model='change'/>
</div>
</template> <script>
export default {
data () {
return {
a: ''
}
},
computed: {
//change () {
// return this.a
//} change :{ // getter 将值赋给change
get: function () {
return this.a
},
// setter 获取改变后的值并设置给a
set: function (newValue) {
this.a = newValue;
}
}
}
}
</script>

(2)vuex获取所需对象而不是具体的属性值,后面进行赋值的操作也会更改vuex中的值(对象按值传递)

<template>
<div>
<!--双向绑定会改变vuex中change的值,官方建议通过commit的方式改变vuex值-->
<input v-model='object.change'>
<div @click='change()'>点我</div>
</div>
</template> <script>
export default {
data () {
return { }
},
computed: {
...mapState({
// 获取vuex中某个对象的属性值给页面展示用
//change: state => state.object.change
object: state => state.object
})
},
method: {
change () {
this.object.change = '赋值' // 同步修改了vuex值
this.change = this.object.change
}
}
}
</script>

 扩展:

一、vue报错Error in mounted hook: "TypeError: handlers[i].call is not a function"

原因:钩子函数书写错误或者钩子函数中使用了未定义的方法

vue报类似警告Computed property "isLoading" was assigned to but it has no setter的更多相关文章

  1. vue store获取值时 Computed property "activeTag" was assigned to but it has no setter.

    出现原因: element-ui中 el-tab绑定的值在切换tab时会自动修改 而activeTag是从store中获取的值,不能直接修改 要添加给它绑定上set   <el-tabs cla ...

  2. vue 报错 Cannot read property '__ob__' of undefined的解决方法

    记不清第n次遇到这个错误了,但是脑子就是不好用,记不住解决办法啊,每次都要找好久才能找到错误,网上还一篇篇的全是错误答案......所以写篇随笔,记录下,方便大家也方便我自己. 网上有人说是组件循环了 ...

  3. Vue报错Cannot read property 'split' of undefined

    今天在项目中处理后端返回的字符串需要使用split做一个字符串转数组的处理,之前项目都运行得好好的,今天突然出问题了,然后面向百度编程了一波,如果你也是用的异步向后端发送请求,可能你的问题和我一样,继 ...

  4. Vue——解决报错 Computed property "****" was assigned to but it has no setter.

    在最近的项目中遇到了如下的警告信息: [Vue warn]: Computed property " currentStep" was assigned to but it has ...

  5. vue报错信息

    1.Property or method "xxx" is not defined on the instance but referenced during render. 原因 ...

  6. vue 源码解析computed

    计算属性 VS 侦听属性 Vue 的组件对象支持了计算属性 computed 和侦听属性 watch 2 个选项,很多同学不了解什么时候该用 computed 什么时候该用 watch.先不回答这个问 ...

  7. vue中watch和computed为什么能监听到数据的改变以及不同之处

    先来个流程图,水平有限,凑活看吧-_-|| 首先在创建一个Vue应用时: var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } ...

  8. 浅谈Vue中计算属性computed的实现原理

    虽然目前的技术栈已由Vue转到了React,但从之前使用Vue开发的多个项目实际经历来看还是非常愉悦的,Vue文档清晰规范,api设计简洁高效,对前端开发人员友好,上手快,甚至个人认为在很多场景使用V ...

  9. vue报错 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's

    [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent c ...

随机推荐

  1. C之交换数据案例

    //值传递 void swap(int i,int j){ printf("交换后:\n "); int tmp; tmp = i; i = j; j = tmp; } //引用传 ...

  2. OpenCL使用CL_MEM_USE_HOST_PTR存储器对象属性与存储器映射

    随着OpenCL的普及,现在有越来越多的移动设备以及平板.超级本等都支持OpenCL异构计算.而这些设备与桌面计算机.服务器相比而言性能不是占主要因素的,反而能耗更受人关注.因此,这些移动设备上的GP ...

  3. tortoiseGit did not exit cleanly (exit code 128)

    安装并配置好tortoiseGit之后,clone项目时,报错: git did not exit cleanly (exit code 128)如下图: 该问题解决方式: 1.确保Pageant启动 ...

  4. 007-log-log4j2、slf4j+log4j2

    一.概述 而log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的. 根本原因在于log4j2使用了LMAX, 一个无锁的线程间通信库代替了, logback和log4j之前的队列. 并发性 ...

  5. springboot整合redis(集群)

    一.加入maven依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId> ...

  6. 比特币 难度值(difficulty)

    难度(Difficulty) 难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个HASH值的困难程度.比特币网络有一个全局的区块难度,有效的区域必须有一个HASH值,该HASH值必须小于给定的目 ...

  7. iOS-XMPP(转)

    IM的实现原理    在我最初学习编程的时候,曾经用JAVA实现了一个最简单版的IM通讯,即通过Socket建立两台电脑之间的连接,然后发送IO流来进行即时通讯,我们现在所使用的IM软件尽管看上去非常 ...

  8. python中dict对象和字符串string对象互相转换

    使用json包 import json dict1 = {"A":"a","B":"b"} # 转换为字符串 json. ...

  9. Python 利用二分法查询数据

    一. 二分法的适用条件 二分法查找适用于数据量较大时, 但是数据需要先排好顺序. 优点: 二分法查找效率特别高 缺点: 二分法只适用于有序序列 二. 二分法的主要思想是:设查找的数组区间为array[ ...

  10. InfluxDB入门教程

    前言InfluxDB是一个时序性数据库,详细资料如下http://liubin.org/blog/2016/02/18/tsdb-intro/ 下载和安装LZ从官网下载的是influxdb-1.2.4 ...