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
  }
}

  代碼改成這樣后,我們在數據修改前先把數據重置后,再進行修改,這個問題就得到了解決,但是也不知道這到底是為什么,這么奇葩的問題,就這樣解決了。(*^__^*)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM