vue报类似警告Computed property "isLoading" was assigned to but it has no setter

摘要:
1、 原因:对于计算属性,当从计算传入函数或对象,但未设置setter,即set属性时。当您尝试直接更改此计算属性的值时,您将报告此警告,而vuex也将报告有关通过提交修改vuex值的警告。

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

参考文档:

vue报类似警告Computed property "isLoading" was assigned to but it has no setter第1张

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

(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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇cassandra数据备份与迁移jQuery Pagination Ajax分页插件中文详解(摘)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

通过反射查找子类、父类的属性(子类找不到则到父类找)

packagecn.ucmed.pangu.lib; importlombok.extern.slf4j.Slf4j; importjava.lang.reflect.Field; importjava.util.ArrayList; importjava.util.Arrays; importjava.util.List; @Slf4j p...

ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架

 1.导言 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数。全栈工程师的压力越来越大。 PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重。因此,前后端分离是web发展的趋势,其中,RESTful API是目前前后端分离的最佳实践,ASP.NET Web API是在.NET Framework上构建RES...

iOS NSNotification的使用

如果在一个类中想要执行另一个类中的方法可以使用通知 1.创建一个通知对象:使用notificationWithName:object: 或者 notificationWithName:object:userInfo: NSNotification* notification = [NSNotification notificationWithName:k...

ASP.NET 全局变量和页面间传值方法

http://www.cnblogs.com/dgjack/archive/2011/05/28/2060913.html 1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。 如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不...

linux运维、架构之路-分布式存储Ceph

一、Ceph介绍        Ceph是一个Linux PB级分布式文件系统,能够在维护POSIX兼容性的同时加入了复制和容错功能。Ceph号称高可用的分布式存储系统,通过多个MON节点(通常为3个)维护集群的状态及元数据信息,而真正存储数据的OSD节点通过向MON节点汇报状态,并通过CRUSH算法将数据副本布局到相应OSD的所在磁盘上,完成数据的持久化...

Object.freeze

Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。数据冻结后不再被修改在vue中数据冻结的...