vuex、mixin

作者: 糕糕AA | 来源:发表于2019-07-02 20:14 被阅读0次
    • vuex状态管理

    用来读取的状态集中放在store中;改变状态mutations(同步的);异步逻辑封装在action中;在mian.js引入store

    场景:登录状态、加入购物车、单页面应用、组件之间的状态

    5个组成

    import {mapState, mapGetters, mapMutations,mapActions} from 'vuex'

    mapState, mapGetters在computed里接收:...mapState(['hasLogin', 'account', 'target', 'shareFrom']),

    mapMutations,mapActions在methods里接收:...mapMutations(['saveShareFrom', 'targetMember']),

    1. 数据存储仓库:state:存放数据状态,不可以直接修改里面的数据
    2. getters:类似vue的计算属性,用来过滤一些数据,与computed结合使用
      • 方法的第一个参数是state
        getNum(state){ // 获取器离state很近,可以直接拿来用
        return state.num
        }
        // 组件中使用
        computed:{
        getMyNum(){
        return this.$store.getters.getNum
        }
        }
    3. mutations:动态修改vuex的store中的状态或数据 - 增、删、改
      • 定义:里面的方法,第一个参数是state指向数据仓库,后面的参数是传入的数据;操作只能是同步的,否则可能丢失记录;组件中通过commit来调用
        mutations:{
        addNum(state){
        state.num++
        },
        }

        this.$store.commit('addNum') //使用commit调用仓库的方法,写在methods函数中
        
    4. actions:通过将mutations里面处理数据的方法,变成可以异步处理数据的方法,通过store.dispath来分发action
      • 有可能去发送请求,存在异步行为
        // store.js中
        actions:{
        // store.getters||commit||state,data // 接收的参数是整个store对象,或者使用解构赋值{commit} addByNumAction({commit}, num) { setTimeout(function () { commit('addByNum',num) }, 0) } } addByNumAction(){ // 异步处理需要调用Action this.store.dispatch('addByNumAction',5)
        }
    5. modules:项目特别复杂时,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构清晰,便于管理
    • mixin混入

    分发vue组件中可复用功能的灵活方式;可以定义的修改不会相互影响

    // 定义
    export const myMixin = {
        data () {
            return{
                num: 1
            }
        },
        created (){
            this.hello();
        },
        methods:{
            hello(){ /* ... */ }
        }
    }
    // 混入到当前组件中
    import {myMixin} from '@/xxx/mixin.js'
    export default {
        mixins: [myMixin],
    }
    // 全局混入:Vue.mixin({...})
    

    区别于vuex:vuex用于状态管理,定义的变量在每个组件中均可修改,并且修改的值会改变

    区别于公共组件:

    • 组件:在父组件中引入组件,相当于在父组件中给出独立空间给子组件使用,然后根据props传值,相对独立
    • mixin:在引入组件后与组件的对象方法进行合并,扩展了组件的对象和方法,形成新的组件

    相关文章

      网友评论

        本文标题:vuex、mixin

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