欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用store中的index遍历store中的数组,因为数组无法改变,即使index改变也无法在视图中更新

程序员文章站 2022-07-09 19:10:52
...

首先前情是一些vuex的理解,不理解这些是很难解决这个错误的。Vue 理解之白话 getter/setter详解

https://www.jb51.net/article/159812.htm

mapState的作用是为了方便。在store.js中定义了count,按道理在index.js中调用是this.$state.count,然后如果而只需要用count声明在了mapState中,就可以直接使用count了。后面的’ count '内的变量是store里面的。

  computed: mapState({ // mapState相当于一个把store中的count映射到这个文档里面来
    count: 'count', 
  }) 

其他也算如此:

https://www.jb51.net/article/138226.htm

我遇到的问题如下,首先是index.vue的模板部分:

//index.vue 其中itemDetail和itemNum都是store中的变量
<header>{{itemDetail[itemNum].topic_name}}</header>

然后是index.vue的state的定义,一般来说只要itemNum和itemDetail的依赖发生变化,就能够在视图中发生变化:

computed: mapState([
  	'itemNum', //第几题
	'itemDetail', //题目详情
]),

因为用了mapState,可以直接在index.vue中使用,但是因为虽然itemNum更新,但是对视图而言itemDetail以及相关依赖没有更新,所以视图不会更新会一直保持原来的。
正确的做法应该是再定义个普通的compute变量,因为写在compute里面所以很他依赖的发生变化视图才会发生变化。

 <header class="item_title">{{item_index}}</header>

注意这里如果用的没有mapState的this.$store.state.itemDetail是不能够成功的。

computed: mapState({
    itemNum:'itemNum', //第几题
    itemDetail:'itemDetail', //题目详情
    item_index: function () {
        // 这里就是computed的原有用法
        return this.itemDetail[this.itemNum-1].topic_name;
    }
相关标签: 前端 vue