• _src_求和案例_多组件共享数据


    <template>
        <div>
            <h1>当前求和为:{{sum}}</h1>
            <h3>当前求和放大10倍为:{{bigSum}}</h3>
            <h3>我在{{school}},学习{{subject}}</h3>
            <h3 style="color:red">Person组件的总人数是:{{personList.length}}</h3>
            <select v-model.number="n">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
            </select>
            <button @click="increment(n)">+</button>
            <button @click="decrement(n)">-</button>
            <button @click="incrementOdd(n)">当前求和为奇数再加</button>
            <button @click="incrementWait(n)">等一等再加</button>
        </div>
    </template>
    
    <script>
        import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
        export default {
            name:'Count',
            data() {
                return {
                    n:1, //用户选择的数字
                }
            },
            computed:{
                //借助mapState生成计算属性,从state中读取数据。(数组写法)
                ...mapState(['sum','school','subject','personList']),
                //借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
                ...mapGetters(['bigSum'])
            },
            methods: {
                //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)
                ...mapMutations({increment:'JIA',decrement:'JIAN'}),
                //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法)
                ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
            },
            mounted() {
                // const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
                // console.log(x)
            },
        }
    </script>
    
    <style lang="css">
        button{
            margin-left: 5px;
        }
    </style>
    <template>
        <div>
            <h1>人员列表</h1>
            <h3 style="color:red">Count组件求和为:{{sum}}</h3>
            <input type="text" placeholder="请输入名字" v-model="name">
            <button @click="add">添加</button>
            <ul>
                <li v-for="p in personList" :key="p.id">{{p.name}}</li>
            </ul>
        </div>
    </template>
    
    <script>
        import {nanoid} from 'nanoid'
        export default {
            name:'Person',
            data() {
                return {
                    name:''
                }
            },
            computed:{
                personList(){
                    return this.$store.state.personList
                },
                sum(){
                    return this.$store.state.sum
                }
            },
            methods: {
                add(){
                    const personObj = {id:nanoid(),name:this.name}
                    this.$store.commit('ADD_PERSON',personObj)
                    this.name = ''
                }
            },
        }
    </script>
    //该文件用于创建Vuex中最为核心的store
    import Vue from 'vue'
    //引入Vuex
    import Vuex from 'vuex'
    //应用Vuex插件
    Vue.use(Vuex)
    
    //准备actions——用于响应组件中的动作
    const actions = {
        /* jia(context,value){
            console.log('actions中的jia被调用了')
            context.commit('JIA',value)
        },
        jian(context,value){
            console.log('actions中的jian被调用了')
            context.commit('JIAN',value)
        }, */
        jiaOdd(context,value){
            console.log('actions中的jiaOdd被调用了')
            if(context.state.sum % 2){
                context.commit('JIA',value)
            }
        },
        jiaWait(context,value){
            console.log('actions中的jiaWait被调用了')
            setTimeout(()=>{
                context.commit('JIA',value)
            },500)
        }
    }
    //准备mutations——用于操作数据(state)
    const mutations = {
        JIA(state,value){
            console.log('mutations中的JIA被调用了')
            state.sum += value
        },
        JIAN(state,value){
            console.log('mutations中的JIAN被调用了')
            state.sum -= value
        },
        ADD_PERSON(state,value){
            console.log('mutations中的ADD_PERSON被调用了')
            state.personList.unshift(value)
        }
    }
    //准备state——用于存储数据
    const state = {
        sum:0, //当前的和
        school:'尚硅谷',
        subject:'前端',
        personList:[
            {id:'001',name:'张三'}
        ]
    }
    //准备getters——用于将state中的数据进行加工
    const getters = {
        bigSum(state){
            return state.sum*10
        }
    }
    
    //创建并暴露store
    export default new Vuex.Store({
        actions,
        mutations,
        state,
        getters
    })
  • 相关阅读:
    cpu时钟周期
    调参学习
    力扣:堆
    学习率衰减问题
    力扣:图之并查集问题
    Java判断空字符串
    python读取文件通过正则过滤需要信息然后保存到新文件里
    python换行写入文件
    Robotium solo.goBack();不起作用,解决方案
    Android清除本地数据缓存代码
  • 原文地址:https://www.cnblogs.com/yyy1234/p/16335989.html
Copyright © 2020-2023  润新知