nuxt開發(fā)手記(4)-深入響應(yīng)問題

M站的開發(fā)還剩下最后2天,基本只剩下優(yōu)化工作,但是今天在優(yōu)化點(diǎn)贊功能的時(shí)候出現(xiàn)了個(gè)小問題:
路由:http://mob.gulugulu.cn/forum/:forumId
在項(xiàng)目的store中,有一處列表頁的緩存,是根據(jù):forumId為key值,存儲(chǔ)的數(shù)據(jù)。大致結(jié)構(gòu)如下:

forumsDetailList: { 
        // eg:單個(gè)G圈列表的詳情
        // 11234123131414:{
        //      sticky:{ //置頂帖
        //          items:[]
        //      },
        //      topics:{ //標(biāo)準(zhǔn)帖
        //          items:[],
        //          step:10,
        //          score:0,
        //          status:true,
        //      },
        //      essence:{ //精華帖
        //          items:[],
        //          step:10,
        //          sinceId:0,
        //          status:true, //此類型是否還有更多數(shù)據(jù)
        //      },
        //      score:0,
        //      scrollTop : ''
        // }
    },

這種結(jié)構(gòu)在store初始化的時(shí)候并未顯式聲明出所有key值,所有的key值都是后期通過用戶操作后動(dòng)態(tài)插入的,于是就有一個(gè)問題,vue在提倡顯式聲明對(duì)象,然后將對(duì)象轉(zhuǎn)變?yōu)閛bserver對(duì)象,動(dòng)態(tài)插值會(huì)導(dǎo)致無法將新插入的屬性轉(zhuǎn)變?yōu)閛bserver對(duì)象,于是后期操作此類數(shù)據(jù)時(shí)會(huì)導(dǎo)致無法刷新視圖。解決思路:將新加入的屬性,通過Obeject.assign()方法合并到已被Vue監(jiān)視的屬性節(jié)點(diǎn)上,即可將新屬性轉(zhuǎn)變?yōu)閛bserver對(duì)象

//最初的動(dòng)態(tài)插值方式(無法被監(jiān)視):
state.forumsDetailList[key] = {}

//后改為(新加入的值可被監(jiān)視):
state.forumsDetailList[key] = {}
state.forumsDetailList = Object.assign({}, state.forumsDetailList)

//拓展更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)
if(sticky){
    state.forumsDetailList[key]['sticky'] = sticky
    state.forumsDetailList[key] = Object.assign({}, state.forumsDetailList[key])
}
if(topics){
    state.forumsDetailList[key]['topics'] = topics
    state.forumsDetailList[key] = Object.assign({}, state.forumsDetailList[key])
}
if(essence){
    state.forumsDetailList[key]['essence'] = essence
    state.forumsDetailList[key] = Object.assign({}, state.forumsDetailList[key])
}

關(guān)于Object.assign()方法,請(qǐng)?jiān)L問:
MDN Doc
vue 文檔-深入響應(yīng)式原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,082評(píng)論 0 29
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,376評(píng)論 11 349
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,246評(píng)論 0 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評(píng)論 18 399
  • 1.取得屬性每個(gè)元素都有一或多個(gè)特性,這些特性的用途是給出相應(yīng)元素或其內(nèi)容的附加信息。 HTMLElement也會(huì)...
    想個(gè)名字真難ing閱讀 314評(píng)論 0 0