Vue筆記四:vuex和vue-router全家桶

除了在組件式方面vue和react有異曲同工之妙之外,vuex和redux也非常像,vue進(jìn)入2.0版本,還得到了兩個(gè)好聽(tīng)的名字“漸進(jìn)式框架”和“自底向上增量開(kāi)發(fā)的設(shè)計(jì)”,參考詳情。

其實(shí),我在學(xué)習(xí)vue之前,學(xué)習(xí)了react。但是react有很多內(nèi)容相對(duì)還是復(fù)雜。JSX是非常JS的思路,但是html和js混寫總是非常奇怪,需要很長(zhǎng)時(shí)間去習(xí)慣。redux應(yīng)該是react的一個(gè)附屬品,也是必學(xué)的。但是它相對(duì)復(fù)雜,學(xué)習(xí)成本較高。但是我學(xué)習(xí)了vuex后,去理解redux變的相對(duì)簡(jiǎn)單。這可能就是vue的“漸進(jìn)式”設(shè)計(jì)。

框架 React Vue
路由 react-router vue-router
數(shù)據(jù) redux vuex

vuex

要學(xué)習(xí)好vuex,必須掌握關(guān)鍵詞:state,getters,actions,mutations,store。詳情參考官方教程,不再贅述。

  • state為狀態(tài)的參數(shù)。

  • getters為獲取器,用于過(guò)濾的方法獲取參數(shù)。

  • mutations是改變狀態(tài)參數(shù)的函數(shù),但是不能直接被調(diào)用,需要對(duì)應(yīng)的store.commit(可以額外傳參數(shù))。

  • actions不是直接修改狀態(tài),而是基于mutations,可以執(zhí)行異步處理

  • store更像一個(gè)容器,裝著以上的所有函數(shù)和參數(shù),最后需要注入到Vue的實(shí)例當(dāng)中。

2.0 特性--輔助函數(shù)

輔助函數(shù)j就是可用可不用。如果你用了,它就會(huì)提高代碼編寫效率的。

  • mapState
  • mapGetter
  • mapMutation

舉個(gè)例子,如果不用輔助函數(shù)mapState,

computed: {
    count () {
      return this.$store.state.count
    }
  }

使用輔助函數(shù)mapState,

computed: mapState([
  // 映射 this.count 為 store.state.count
  'count'
])

如果不用輔助函數(shù)mapGetter,

computed: {
  doneTodosCount () {
    return this.$store.getters.doneTodosCount
  }
}

使用輔助函數(shù)mapGetter,

computed: {
  // 使用對(duì)象展開(kāi)運(yùn)算符將 getters 混入 computed 對(duì)象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
    ])
  }

如果不用輔助函數(shù)mapMutation,

  methods: {
    increment(){
        this.$store.commit('increment')
    },
}

使用輔助函數(shù)mapMutation,

methods: {
    ...mapMutations([
      'increment',
     ]),
}

如果不用輔助函數(shù)mapActions,

  methods: {
    increment(){
        this.$store.dispatch('increment')
    },
}

使用輔助函數(shù)mapActions,

methods: {
    ... mapActions([
      'increment',
     ]),
}

vue-rounter

vue-router的出現(xiàn)不是個(gè)意外,也不是讓你將所有的路由都裝在vue-router。它更多是用于SPA,把一些動(dòng)態(tài)的內(nèi)容提取出來(lái)。例如動(dòng)態(tài)路由。詳情請(qǐng)參考官網(wǎng)

const User = {
  template: '<div>User</div>'
}

const router = new VueRouter({
  routes: [
    // 動(dòng)態(tài)路徑參數(shù) 以冒號(hào)開(kāi)頭
    { path: '/user/:id', component: User }
  ]
})

路由可以針對(duì)組件User分配id,js端也可以獲取路由的參數(shù)。

const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}

關(guān)于懶加載

懶加載的功能并非vue特有,而是webpack特有的,有幾種特殊的寫法。

const Foo = resolve => {
  // require.ensure 是 Webpack 的特殊語(yǔ)法,用來(lái)設(shè)置 code-split point
  // (代碼分塊)
  require.ensure(['./Foo.vue'], () => {
    resolve(require('./Foo.vue'))
  })
}

也可以簡(jiǎn)寫為

const Foo = resolve => require(['./Foo.vue'], resolve)

懶加載會(huì)獨(dú)立分包,把對(duì)應(yīng)的組件獨(dú)立打包。而懶加載組件的css將不會(huì)進(jìn)行提取。但是會(huì)對(duì)route-view級(jí)別的css進(jìn)行打包,因此建議將共有的css放在route-view級(jí)別。

轉(zhuǎn)載,請(qǐng)表明出處。總目錄前段收集器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Vue也已經(jīng)升級(jí)到2.0版本了,到現(xiàn)在為止(2016/11/19)比較流行的MVVM框架有AngularJS(也有...
    彬_仔閱讀 27,409評(píng)論 12 114
  • 來(lái)源:github.com Vue.js開(kāi)源項(xiàng)目速查表:https://www.ctolib.com/cheats...
    zhangtaiwei閱讀 11,943評(píng)論 1 159
  • vuex是什么鬼? 如果你用過(guò)redux就能很快的理解vuex是個(gè)什么鬼東西了。他是vuejs用來(lái)管理狀態(tài)的插件。...
    麥子_FE閱讀 7,020評(píng)論 3 37
  • 今天是第一天的原地跑步計(jì)劃的實(shí)施日。以后每天記錄一下。 今天跑了約60分鐘,跑步時(shí)看了一部連姆·尼森主演的電影《急...
    諸葛兔閱讀 143評(píng)論 0 1
  • 眾所周知,視覺(jué)元素在網(wǎng)頁(yè)信息中扮演了舉足輕重的角色,無(wú)論是更新社交媒體上信息、還是發(fā)博客、寫電子書或者在線制作幻燈...
    老王的餅店閱讀 722評(píng)論 0 3

友情鏈接更多精彩內(nèi)容