当前位置: 首页 > news >正文

Vuex:Computed property “xxx“ was assigned to but it has no setter.

场景:

项目中使用vuex进行状态管理,控制对话框的弹出与隐藏,在实际应用过程中,出现Computed property "xxx" was assigned to but it has no setter.错误警告,经过几番测试发现原因在于:直接将mapState中的数据绑定到了组件上, 而没有经过watch监听属性的变化重新赋值给data中的一个变量再绑定。代码如下:

Vuex store>modules>vuexA.js:

const state = () => ({
  show: false,  // 控制显示与隐藏dialog
})

const getters = {
  
}

const mutations = {
  SHOWDIALOG(state, value) {
    state.show = value;
  },
}

const actions = {
  showDialog(context, value) {
    context.commit('SHOWDIALOG', value);
  },
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}

使用到Vuex中action的子组件Table.vue:

<template>
  <div class="my-table">
    <el-table :data="data" @cell-click="cellHandleclick">
    ...
    </el-table>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'

export default {
  name: 'MyTable',
  data() {
    return {
      
    }
  },
  methods: {
    ...mapActions('vuexA', ['showDialog']),
    cellHandleclick(row, column, cell, event) {
	  if(column.label === 'XX') {
        this.showDialog(true);
      }
    });
  },
}
</script>
<style scoped>
</style>

使用到Vuex中state的子组件Table.vue的父组件Father,Father中List组件为包含dialog的子组件,Father中使用watch监听vuex中show的变化:

<template>
  <div>
    <!-- Table组件-->
    <Table />
    <!-- List组件 -->
    <List v-show="showList"/>
  </div>
</template>

<script>
const Table = resolve => (require(['@/views/pages/Table'], resolve));
const List = resolve => (require(['@/views/pages/List'], resolve));

import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'

export default {
  name: 'Father',
  components: {
    Table,
    List 
  },
  data() {
    return {
      showList: this.show,
    }
  },
  computed: {
    ...mapState('vuexA', ['show']),
  },
  watch: {
    show(val) {
      this.showList= val;
    }
  },
}
</script>

<style scoped>
</style>

使用到Vuex中state的子组件List.vue,:visible.sync绑定的showList同样来源于watch监听的vuex中的state的show值,在点击关闭按钮时触发close事件,close事件触发vuex中的showDialog:

<template>
  <!-- List组件 -->
  <div class="listDialog">
    <el-dialog :visible.sync="showList"  width="90%" @close="close">
      ...
    </el-dialog>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'

export default {
  name: 'List',
  data() {
    return {
      showList: this.show,
    }
  },
  computed: {
    ...mapState('vuexA', ['show']),
  },
  watch: {
    show(val) {
      console.log(val);
      this.showPoorUserList = val;
    }
  },
  methods:{
    ...mapActions('vuexA', ['showDialog']),
    close() {
      this.showDialog(false);
    },
  },
}
</script>

<style scoped>
</style>

总结:组件中的v-show和:visible.sync直接绑定vuexA中的show会在点击close按钮的时候报出警告,按照上面代码中的方式使用watch监听后再重新赋值绑定则不会报错。

相关文章:

  • git commit提交代码是报错:running pre-commit hook: npm run precommit解决办法
  • js三层数组循环遍历(笛卡尔积)运算,并生成顺序
  • ERROR in ./src/.umi/core/routes.ts 402:19-404:109Module not found: Error: [CaseSensitivePathsPlugin
  • 响应式布局
  • GIT安装与使用
  • 初识微信小程序
  • 初步微信小程序
  • 模板引用
  • template标签与小程序数据加载报错问题
  • 上拉加载
  • 组件与组件通信
  • 组建的引入与传参
  • 小程序游戏请求
  • 小程序登录
  • 云开发增删改
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • eclipse的离线汉化
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Javascript设计模式学习之Observer(观察者)模式
  • Java反射-动态类加载和重新加载
  • leetcode46 Permutation 排列组合
  • Mysql优化
  • Nodejs和JavaWeb协助开发
  • text-decoration与color属性
  • 半理解系列--Promise的进化史
  • 第十八天-企业应用架构模式-基本模式
  • 番外篇1:在Windows环境下安装JDK
  • 关于for循环的简单归纳
  • 关于字符编码你应该知道的事情
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 实现简单的正则表达式引擎
  • 移动端 h5开发相关内容总结(三)
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 智能网联汽车信息安全
  • puppet连载22:define用法
  • 关于Android全面屏虚拟导航栏的适配总结
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)软件测试分工
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • *Django中的Ajax 纯js的书写样式1
  • .apk 成为历史!
  • .NET CLR Hosting 简介
  • .NET Core引入性能分析引导优化
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET值类型变量“活”在哪?
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • []我的函数库