day10vuex模块化、映射函数、SASS

文章介绍了Vuex中通过模块化管理复杂状态的方法,包括创建独立的js文件、启用namespaced、导入和管理模块。同时,提到了映射函数如mapState、mapGetters、mapMutations和mapActions在组件中的使用,以简化对Vuex状态和方法的访问。此外,文章还讨论了Sass作为CSS预处理器的优势,如变量、嵌套选择器、条件语句和函数,以增强CSS的可维护性和灵活性。
摘要由CSDN通过智能技术生成

一、模块化

原因:

使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

步骤:

1.一个模块一个js文件,负责管理一个数据每个模块拥有自己的 state、mutations、actions、getters,不需要module、plgins

2.模块对象的首行添加:namespaced:true,代表开启模块化,并将该对象导出

3.vuex对象文件中导入需要的模块

4.vuex对象中的moudles方法中管理导入的模块

------------------------------1.是一个js文件( 模块 ) , 负责管理historylist这个数据
export default {
    namespaced:true,----------2.开启模块化
    state:{ //存储数据
        historylist:[],
    },
    getters:{ //定义计算方法( 类似于组件中的计算属性 )
        
    },
    mutations:{ //定义同步方法

        //新增历史记录
        addHistory( state, payload ){
            state.historylist.push(payload);
        }

    },
    actions:{ //定义异步方法

    }
}
//----------------------------------------------------------
import { createStore,createLogger } from 'vuex'
-------------------------------------3.导入拆分出去的模块
import historylist from './modules/historylist'
//实例化vuex
export default createStore({
    state:{ //存储数据

    },
    getters:{ //定义计算方法( 类似于组件中的计算属性 )

    },
    mutations:{ //定义同步方法
        
    },
    actions:{ //定义异步方法

    },
    modules:{ //以模块化的方式管理state中的数据
        hl:historylist,-----------4.管理导入的模块
    },
    plugins:[ //集成第三方插件 来管理state中的数据
        createLogger()
    ] 
})

使用:

  1. 获取模块中的数据:$store.state.模块名.数据名

  2. 获取模块中的计算方法:$store.getters["模块名"/计算方法名]

  3. 触发模块中的同步方法:$store.commit("模块名/同步方法名",参数)

  4. 触发模块中的异步方法:$store.dispatch("模块名/异步方法名",参数)

<template>--------------------获取模块中的计算方法
  <div class="summary">
    <span>全部( {{ $store.getters['tl/totalCount'] }} )</span>
    <span>已完成( {{ $store.getters['tl/finishedCount'] }} )</span>
    <span>未完成( {{ $store.getters['tl/unfinishedCount'] }} )</span>
  </div>
</template>
//=========================================
<template>
  <div class="tasklist">
    <div class="task" v-for="(item,index) in $store.state.tl.tasklist" :key="index">----获取模块中的数据
        <div class="left">
            <input type="checkbox" :checked="item.status" @click="handleClick(item.id)">
            <span>{{item.name}}</span>
        </div>
        <span @click="handleDelete(item.id)">删除</span>
    </div>
   
  </div>
</template>
<script>
export default {
    methods:{
        handleClick(id){
            //触发同步方法(调用同步方法) changeTaskStatus
            this.$store.commit('tl/changeTaskStatus',id);-----触发模块中的同步方法
        },
        handleDelete(id){
            //触发同步方法(调用同步方法) deleteTask
            this.$store.commit('tl/deleteTask',id);------------触发模块中的同步方法
        }
    }
}
</script>

二、映射函数

作用:

可以将Vuex中的状态映射到组件的计算属性或方法中,以便于组件使用。在组件中使用映射函数,可以直接使用计算属性或方法来访问Vuex中的状态,而不需要在组件中写$store

步骤

  1. 在组件中,从vuex导入映射函数mapStat、mapGetters、mapMutations、mapActions

  2. 在对应的选项中映射数据,mapStat和mapGetters映射到computed,mapMutations和mapActions映射到methods中,

  3. 直接使用模块中的数据或者方法,不需要再加this.$store,

使用

  1. 获取模块中的数据:

    1. 映射数据:computed:{...mapState('模块名',['数据名'])}

    2. 使用数据:this.数据名

  2. 获取模块中的计算方法:

      使用数据:this.计算方法名

    1. 映射数据:computed:{...mapGetters('模块名',['计算方法名'])}

  3. 触发模块中的同步方法:

      使用数据:this.同步方法名

    1. 映射数据:computed:{...mapMutations('模块名',['同步方法名'])}

  4. 触发模块中的异步方法:

      使用数据:this.异步方法名

    1. 映射数据:computed:{...mapActions('模块名',['异步方法名'])}

<template>
  <div class="historyrecord">
    <div class="title">历史记录</div>
    <div class="list">-------------historylist直接使用
        <span v-for="(item,index) in historylist" :key="index">{{item}}</span>
    </div>
  </div>
<script>
import { mapState } from 'vuex'------mapState()从vuex中获取(映射)state到组件的computed中
export default {
  computed:{
    ...mapState('hl',['historylist'])--------映射模块的state数据
  }
}
</script>

//================================================================================

<script>
import { mapMutations } from 'vuex'------mapMutations() 从vuex中获取(映射)同步方法到组件的methods中
export default {
    data(){
        return {
            taskname:''
        }
    },
    methods:{
        ...mapMutations( 'tl', ['addTask']),--------映射模块的同步方法addTask
        ...mapMutations( 'hl', ['addHistory'])--------映射模块的同步方法addHistory
        handleAdd(){
            //触发同步方法( 调用同步方法 ) addTask
            this.addTask(this.taskname);----------直接使用
            //触发同步方法( 调用同步方法 ) addHistory
            this.addHistory(this.taskname);----------直接使用
            //清空输入框的值
            this.taskname = '';
        },
    }
}
</script>

三、sass

作用:

Sass(Syntactically Awesome Style Sheets)是一种CSS预处理器,它为CSS添加了许多功能和语法,使得CSS更加强大、灵活和易于维护。

步骤:

  1. 下载sass模块:nmp i sass

  2. style修改为:<style scoped lang='scss'>

特点

  1. 变量:Sass中可以定义变量,可以存储颜色、字体、尺寸等常用的样式值。使用变量可以使样式表更加清晰易读,并且可以方便地修改样式。

  2. 嵌套:Sass中支持选择器的嵌套,可以使样式表更加易于管理。不需要在CSS中写出完整的选择器,可以使用嵌套的方式来定义样式。

  3. 条件语句:Sass中支持if语句和for循环语句,可以根据条件动态生成样式,从而实现更加灵活的样式设计。

  4. 函数:Sass中支持函数的定义和调用,可以实现更加复杂的样式计算。可以定义一些常用的样式计算函数,然后在样式表中直接调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值