美文网首页
【nuxt.js笔记】nuxt.js中使用Vuex

【nuxt.js笔记】nuxt.js中使用Vuex

作者: charoner | 来源:发表于2019-09-28 10:26 被阅读0次

Nuxt.js 内置引用了 vuex 模块,所以不需要额外安装。

Nuxt.js 会找到应用根目录下的 store 目录,如果该目录存在,它将做以下的事情:

  1. 引用 vuex 模块
  2. vuex 模块 加到 vendors 构建配置中去
  3. 设置 Vue 根实例的 store 配置项

Nuxt.js 支持两种使用 store 的方式,你可以择一使用:

  • 模块方式: store 目录下的每个 .js 文件会被转换成为状态树指定命名的子模块 (当然,index 是根模块)
  • 普通方式: store/index.js 返回一个 Vuex.Store 实例(官方不推荐)

模块方式

状态树还可以拆分成为模块,store 目录下的每个 .js 文件会被转换成为状态树指定命名的子模块

使用状态树模块化的方式,store/index.js 不需要返回 Vuex.Store 实例,而应该直接将 statemutationsactions 暴露出来:

index.js

export const state = () => ({
    articleTitle: [],
    labelList: []
})

export const mutations = {

    // 设置热门文章标题
    updateArticleTitle(state, action) {
        state.articleTitle = action
    },

    // 设置标签列表数据
    updateLabel(state, action){
        state.labelList = action
    }

}

export const actions = {

    // 获取热门文章标题
    fetchArticleTitle({ commit }) {
        return this.$axios
            .$get('http://localhost:3000/article/title')
            .then(response => {
                commit('updateArticleTitle', response.data)
            })
    },

    // 获取标签
    fetchLabel({ commit }) {
        return this.$axios
            .$get('http://localhost:3000/label/list')
            .then(response => {
                commit('updateLabel', response.data)
            })
    },

}

index.vue
fetch方法中触发异步提交状态事件

<script>
import ArticleList from '~/components/archive/list'
import Banner from '~/components/archive/banner'


export default {
  components: {
    ArticleList,
    Banner,
  },
  async asyncData({ app }){
    //获取文章列表数据
    let article = await app.$axios.get(`http://localhost:3000/article/list?pageNum=1&pageSize=5`)
    return {articleList: article.data.data}
  },
  async fetch({ store }) {
      return Promise.all([
          store.dispatch('common/fetchArticleTitle'),
          store.dispatch('common/fetchLabel')
      ])
  },
  computed: {

  },
  methods: {

  }
}
</script>

对应组件中通过computed 方法获取状态数据

computed: {
      labelList(){
        return this.$store.state.common.labelList
      }
    },

相关文章

网友评论

      本文标题:【nuxt.js笔记】nuxt.js中使用Vuex

      本文链接:https://www.haomeiwen.com/subject/lrnoyctx.html