千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  html5技术干货  >  正文

说说Vuex的工作流程

来源:千锋教育
作者:qyf
关键词: 成都前端 武汉前端
2022-09-19
分享

Vuex的工作流程

  vuex的仓库有5个模块,分别是 state,mutations, actions, getters, modules

  我们将组件的公共状态定义在 vuex仓库的state中,state是只读的,无法直接修改,必须调动仓库中的某个mutation才能修改状态,getters可以理解为vuex中的计算属性,当我们在某个组件中使用vuex中的某个state时,不是直接使用原值,而是需要派生出一个新的值,就可以定义getters,可以在组件中获取。当依赖的state发生改变,此时getters会重新计算得到新值,同时 action中可以发送异步请求,得到数据后,commit mutation来给state赋值

  具体代码如下:

  仓库代码

const store = new Vuex.Store({

    state: {

        items: [] // 定义一个公共的购物车数据

    },

    getters: {

        // 可以基于已有的state 派生新的状态

        selectedItems (state) {

            // 过滤购物车中未选中的商品

            return state.items.filter(item => item.selected)

        }

    },

    mutations: {

        // 定义mutation来修改state

        INIT_ITEMS(state, items){

            state.items = items

        }

    },

    actions: {

        // action可以发送异步请求,得到数据后commit mutation将请求结果传入

        FETCH_ITEMS({commit}, params = {}){

            // 调用封装好的 接口函数

            fetchItem(params).then(res => {

                if(res.data.code === 200) {

                    commit('INIT_ITEMS', res.data.data)

                }

            })

        }

    }

})

组件中使用 使用vuex

// 获取state

this.$store.state.items // 直接获取

{

    computed: {

        ...mapState(['items']) // 助手函数获取

    }

}

// 获取getters

this.$store.getters.selectedItems // 直接获取

{

    computed: {

        ...mapGetters(['selectedItems']) // 助手函数获取

    }

}

// 组件中提交action

this.$store.dispatch('FETCH_ITEMS', {token: 'xxx'})

{

    methods: {

        ...mapActions(['FETCH_ITEMS']) // 助手函数 直接调用this.FETCH_ITEMS(params)触发

    }

}

// 组件中也可以直接commit  mutation

this.$store.commit('INIT_ITEMS'[,参数])

{

    methods:{

        ...mapMutations(['INIT_ITEMS']) // 助手函数 直接调用this.INIT_ITEMS(参数)

    }

}


声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • vuex中actions与mutations的区别 总体来说:actions 1、用于通过提交mutation改变数据 2、会默认将自身封装为一个Promise 3、可以包含任意的异步操作mutations 1、通过提交commit改变数据 2、只是一个单纯的函数 3、不要使用异步操作,异步操作会导致变量不能追踪
  • vuex数据丢失怎么解决 vuex的 store 中的数据是保存在运行内存中的,当页面刷新时,页面会重新加载 vue 实例,vuex 里面的数据就会被重新赋值,这样就会出现页面刷新vuex中的数据丢失的问题。 如何解决浏览器刷新数据丢失问题呢?
  • 说说vuex的管理操作或理解 vuex有一个仓库概念,将组件公共的state存储在仓库的state属性中,state是只读的,组件只能使用,不能直接修改,修改需要通过 仓库中的mutations模块来修改,这样的好处是 当数据修改便于溯源,且不会因为 多个组件 直接修改数据,导致 组件间数据的互相影响, 同时 当我们仓库中有一个state 数据需要请求 数据接口才能获取时,vuex 设计了一个action模块,在action模块中发送异步请求,得到数据后,提交mutation来修改state。
  • 说说Vuex的工作流程 我们将组件的公共状态定义在 vuex仓库的state中,state是只读的,无法直接修改,必须调动仓库中的某个mutation才能修改状态,getters可以理解为vuex中的计算属性,当我们在某个组件中使用vuex中的某个state时,不是直接使用原值,而是需要派生出一个新的值,就可以定义getters,可以在组件中获取。
  • vuex—个模块中改变state中数据,其他模块如何获取? 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:
  • vuex的状态是怎样的,怎么改变状态 vuex的状态储存在仓库的state属性中,state是只读的,无法直接修改必须调用mutation才能修改,const store = new Vuex.Store({,// 在组件中直接出发mutaion,this.$store.commit('ADD_NUM', 10)// 或者助手函数 提交 mutation