vue项目开发中,vuex里面的sotre数据改变,但是没有触发getter并没触发,视图也不更新

  在vue 和 vuex 的开发中,我们可能会遇到一些奇葩的问题,比如说下面的我在开发里遇到的一个奇葩问题。

 vuex 的数据

/**
 * 获取表格数据  VUEX
 */
import init from '../../api/init/init'

const state = {
  tableData: { // 表格数据
    content: [], // 表格数据
    total: 0 // 总条数
  }
}

const mutations = {
  getTableDataMutationsFn: function (data) { // 修改表格数据
    state.tableData.content = data.content
    state.tableData.total = data.title
  }
}

const getters = {
  getTableDataGettersFn: state => { // 导出表格数据
    return state.tableData
  }
}

const actions = {
  getTableData ({commit}, params) { // 获取表格数据
    init.getTableData(params, data => {
      commit('getTableDataMutationsFn', data)
    })
  }
}

export default {
  state,
  getters,
  actions,
  mutations
}

  第一次初始化触发actions的事件拿取数据的时候,数据经过 mutations 事件修改 state 的 tableData 里的 content 和 total 的数据时 会触发 getter事件 将数据返回到页面上,但是在页面的页数发生变化,重新触发actions的获取数据的事件触发后,可以经过 mutations 的事件修改 state 的数据, 但是没有触发 getter 的数据变化, 而且也没有触发到页面的变化。

  刚开始的时候,我想的是是不是因为数据没有改变,但是我又在数据修改后console。了一下数据,数据确实是修改了,我又在getter的事件里console。了一下,发现只有第一次初始化的时候,触发了打印事件,在第二次页面页数发生改变触发第二次actions的事件 ,修改了state的数据后没有触发getter 的事件。

  刚开始我在网上看了很多关于 vuex的state变化了,但是页面没有触发更新的文章,但是都没有解决实质上的问题。后台我又自己慢慢琢磨,vuex是不能监听到数组的长度变化的,所以我在想是不是因为这样的原因。后来我就试了把代码改成了

/**
 * 获取表格数据  VUEX
 */
import init from '../../api/init/init'

const state = {
  tableData: { // 表格数据
    content: [], // 表格数据
    total: 0 // 总条数
  }
}

const mutations = {
  getTableDataMutationsFn: function (data) { // 修改表格数据
// 重置 数据
    state.tableData.content = null
    state.tableData.total = null
// 赋值 数据
    state.tableData.content = data.content
    state.tableData.total = data.title
  }
}

  代码改成这样后,我们在数据修改前先把数据重置后,再进行修改,这个问题就得到了解决,但是也不知道这到底是为什么,这么奇葩的问题,就这样解决了。(*^__^*)

posted @ 2017-11-03 20:02  MewEle  阅读(14216)  评论(3编辑  收藏  举报