关于computed的set和get

来源:10-3 修改文章编码 第二部分 - 改进 ValidateInput 组件

希望林柚一健康快乐成长

2022-04-26

老师,我想在我的项目中使用这个高级用法,但是嵌套了一层vuex,不知道还能不能使用计算属性的computed的set和get呢
项目背景:
我有一个全局弹框,弹框的显隐使用的是vuex中state中的变量来进行控制
图片描述
但是当我点击element-ui组件对话框的关闭按钮,会触发报错,提示我的计算属性没有setter,此时弹框不会关闭
所以我加上了弹框的@close事件,触发关闭事件的时候触发一个mutations,
handleClose(){
this.changeWritePaperVisible(false)
},
这样改进之后,虽然弹框能够关闭了,但是页面的报错还是会有
想问一下:当计算属性是vuex的变量的时候,计算属性使用mapstate的时候还能写setter和getter吗?如何实现
图片描述

如果不使用计算属性,我想到的方案就是在组件中定义一个自己的变量,通过监听全局vuex的值,来设置组件的变量的true或者false,这样是可以实现的,但是我就是想用计算属性的setter试试,0.o 老师帮瞅瞅

经过老师提醒,最终解决方案如下,有需要的小伙伴可以参考下,不再使用mapstate获取vuex的数据,而是直接使用计算属性,set的时候直接调用全局vuex的mutations方法,这样去触发element-ui的关闭按钮的时候,可以重置writepapervisible的值,页面不会发生报错,
图片描述

写回答

1回答

张轩

2022-04-27

同学你好 

以为没法看到项目 所以只能猜测 首先报错是因为你的 computed 也就是 whitePaperVisible 并没有设置任何的 getter setter 啊? 所以报错了啊,那个错误信息挺明显的。

mapState 没法支持 getter setter,你可以直接用computed 试试,比如这样

computed: {
    todo: {
        get () { return this.$store.state.todos.todo},
        set (value) { this.updateTodo(value) }
    }
}


0
1
希望林柚一健康快乐成长
非常感谢!老师你真的太棒了,搞定了
2022-04-27
共1条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程