首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何侦听由vuex产生的计算数组的变化

如何侦听由vuex产生的计算数组的变化
EN

Stack Overflow用户
提问于 2019-10-02 19:20:10
回答 1查看 761关注 0票数 0

我有一个由存储状态组装的计算数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
computed: {
  ...mapGetters([
    '$tg',
  ]),
  ...mapState({
    podcastList: state => state.listening.podcastList,
  }),
  tabList: {
    get() {
      const questionTitle = this.$tg('questions');
      const list = this.podcastList.map((poadcast, index) => ({
        ...poadcast,
        title: `${questionTitle}${index + 1}`,
        answers: [...poadcast.answers],
      }));
      return list;
    },
    set(value) {
      // I want dispatch action here..
      console.log('set', value);
    },
  },
}

podcastList的构造是一个对象数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ 
  { 
    id: 1,  
    answers: [ 
      { id: 1, content:'foo'}, { id: 2, content: 'bar'}
    ]
  }, //.....
]

我使用v-for来创建一个由input组成的组,它是answers的绑定。看上去:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="columns is-vcentered" v-for="(answer, index) in tab.answers" :key="index">
 <input type="text" v-model="answer.content"/>
</div>
// tab is an element of my tabList

我的问题是:如果我更改了输入的值,计算机设置器就不会被触发。我会收到消息的

错误: vuex不变异vuex存储状态之外的变异处理程序。

我知道我不能直接修改状态,但我不知道如何将该操作作为官方网站的示例进行调度。有人能帮忙吗?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 19:55:04

v-model只有在将tabList映射到它(类似于组件中的v-model="tabList" )时才能工作。

您必须直接更改每个答案,方法是使用value@input代替v-model

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="columns is-vcentered" v-for="(answer, index) in tab.answers" :key="index">
 <input type="text" :value="answer.content"
       @input="$store.commit('updateAnswer', { podcastId: tab.id, answerId: answer.id, newContent: $event.target.value })" />
</div>
// tab is an element of my tabList

updateAnswer突变就像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mutations: {
  updateAnswer (state, { podcastId, answerId, newContent }) {
    state.listening.podcastList
        .find(podcast => podcast.id === podcastId)
        .map(podcast => podcast.answers)
        .find(answer => answer.id === answerId).content = newContent;
  }
}

--

您也许可以通过创建一个方法来减少样板:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods: {
  updateAnswer(tab, answer, event) {
    this.$store.commit('updateAnswer', { podcastId: tab.id, answerId: answer.id, newContent: event.target.value });
  }
}

并把它当作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" :value="answer.content" @input="updateAnswer(tab, answer, $event)" />

或者通过创建一个组件(可以是功能性的):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.component('answer', {
  template: `
    <input type="text" :value="answer.content"
           @input="$store.commit('updateAnswer', { podcastId: tab.id, answerId: answer.id, newContent: $event.target.value })" />
  `
  props: ['tab', 'answer']
})

并把它当作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="columns is-vcentered" v-for="(answer, index) in tab.answers" :key="index">
 <answer :tab="tab" :answer="answer"/>
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58211882

复制
相关文章
分享 5 种在 JS 中访问对象属性的方法
点属性访问器是在 JavaScript 中访问对象属性的最常见和最直接的方式。它使用点 (.) 表示法来访问对象的特定属性。
前端达人
2023/08/31
1.9K0
分享 5 种在 JS 中访问对象属性的方法
【Android Gradle 插件】Gradle 扩展属性 ④ ( 扩展属性访问方式 | 直接访问扩展属性 | 通过 ext 对象访问 | 在 gradle.properties 中定义扩展属性 )
也可以 通过 project.ext.hello 访问该扩展属性 , 代码如下 :
韩曙亮
2023/03/30
2.5K0
【Android Gradle 插件】Gradle 扩展属性 ④ ( 扩展属性访问方式 | 直接访问扩展属性 | 通过 ext 对象访问 | 在 gradle.properties 中定义扩展属性 )
PHP面向对象-对象属性的访问和修改
可以使用对象实例的箭头运算符 -> 来访问对象属性。这个运算符后面跟着属性名。例如,如果有一个名为 $person 的对象实例,它有一个名为 $name 的属性,那么可以这样访问它:
堕落飞鸟
2023/04/27
2.1K0
Python 类对象和实例对象访问属性的区别、property属性
下面的一个小demo,定义了一个省份类  Province ,即类对象 Province ,开辟了一块内存空间,空间中存放着 类属性 country 和 __init__()方法 。
用户7886150
2020/12/20
3.7K0
属性访问
通常可以通过点(.)操作符的形式去访问对象的属性,关于属性的访问,也有相应的魔法方法来管理,
天钧
2019/07/28
7430
Python 中几种属性访问的区别
python的提供一系列和属性访问有关的特殊方法:__get__, __getattr__, __getattribute__, __getitem__。本文阐述它们的区别和用法。
Python猫
2019/08/06
2.1K0
Python 中几种属性访问的区别
如何直接访问php实例对象中的private属性详解
前言 本文主要介绍了关于如何直接访问php实例对象中private属性的相关内容,在介绍关键部分之前,我们先回顾一下php面向对象的访问控制。 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。
用户2323866
2021/07/09
3.3K0
【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )
在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ;
韩曙亮
2023/10/11
2850
【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )
Vuex中的state访问状态对象
state ,这个就是我们说的访问状态对象,它就是我们SPA(单页应用程序)中的共享值。
wust小吴
2019/12/27
3.2K0
访问本地 localhost能访问,ip地址无法访问
本地ip无法访问.png 可以在命令窗口下输入 netstat -ano ,查一下9527端口在哪个ip上侦听 例如 netstat -ano "9527" 获取.png
河湾欢儿
2019/03/15
11.4K1
访问本地 localhost能访问,ip地址无法访问
如何设置电脑不能访问公网但是能够访问内网
方法: 删除本地路由 手动添加只能访问内网的路由 首先查看本地路由 打开cmd 输入 ipconfig /all 通常默认网关对应的路由即是默认路由
我是李超人
2020/08/21
4.4K0
如何设置电脑不能访问公网但是能够访问内网
HTML DOM 访问
下面的例子返回包含文档中所有 <p> 元素的列表,并且这些 <p> 元素应该是 id="main" 的元素的后代(子、孙等等):
陈不成i
2021/07/21
7170
CLB无法访问/访问超时排查
访问CLB超时,原因可能有多种,以下几种排查方式可协助你快速定位问题原因。 确定网络连通性及安全规则是否放行 ping vip是否正常,是否有丢包 clb安全组、rs安全组、acl、os内部iptables等是否放行 clb带宽是否到达瓶颈(仅限标准账户,传统账户带宽在RS上管理) 确认业务侧正常 绕过LB直接访问RS是否正常 如果RS只有内网IP,可通过同VPC内其他机器访问,如果要携带域名访问,机器内部修改hosts文件或curl携带host头部访问: echo x.x.x.x domain
RokasYang
2021/07/27
4.4K1
CLB无法访问/访问超时排查
jvm对象的访问
在 HotSpot虚拟机中,对象在内存中存储的布局分为三块区域:对象头,实例数据,和对齐填充。
海向
2020/07/03
8120
私有属性/方法的访问
在属性/方法名前有双下划线的,称为私有属性/方法,私有属性/方法外部不能直接访问,
py3study
2020/01/17
1.9K0
从外部访问Kubernetes中的Pod
本文主要讲解访问kubernetes中的Pod和Serivce的几种方式,包括如下几种:
我的小碗汤
2019/07/30
2.9K0
EasyNVR安装成功但web页无法正常访问的原因分析
随着互联网基础设施建设的不断完善和发展,带宽的不断提速,尤其是光纤入户、4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看、可控、可视频会议调度指挥、可智能预警、可智能检索回溯的诉求越来越多,尤其是移动视频应用技术和智能语音技术的普及和发展,使得视频智能分析和语音智能理解支持的需求在各行各业越来越受到青睐和重视,简简单单的视频直播、视频会议、语音播报已经越来越不符合商业规律。而在传统视频监控、视频会议行业里面,互联网思维、架构和技术完全可以成功引入,尤其是在移动互联网、物联网、深度学习、智能分析、云端组网方面的融合技术,完全能够满足新形势下的各种行业的终端智能化的需要。
EasyNVR
2020/04/22
9630
EasyNVR安装成功但web页无法正常访问的原因分析
超简单一步解决Win10系统无法访问网页,但软件能够联网的问题
 目前大部分用户的电脑使用的都是Windows系统,在日常使用的过程中难免会遇到各种各样的问题,大部分问题都能轻松的解决,但是遇到电脑无法访问所有网页,但是电脑软件却能够正常上网的问题时,让人非常难解决,无论是更换网络、重新连接、重启电脑,大部分时候都是无法解决这个问题的,接下来我就把自己实际遇到这个问题时的解决办法分享出来。
非著名运维
2022/12/12
1K0
超简单一步解决Win10系统无法访问网页,但软件能够联网的问题
jQuery对象访问
( t h i s ) . g e t ( 0 ) 与 (this).get(0)与
IT工作者
2022/05/10
1.1K0
点击加载更多

相似问题

AngularJS:无法从工厂访问对象属性

20

AngularJS:无法访问控制器中的对象属性

11

Angularjs。从AngularJS控制器访问属性

10

无法访问对象属性angularjs

23

html不能访问控制器angularjs中的对象

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文