114.【Vue-细刷-05】(三)

简介: 114.【Vue-细刷-05】

6.求和案列_Vuex中的mapMutations

假如说actions中的方法没有逻辑,那么我们可以直接在Vue中直接传入Mutations

main.js

import Vue from 'vue'  // 引入阉割版本的vue
import App from './App.vue' // 引入App.vue组件
import store from './vuex/store'  // 引入vuex
Vue.config.productionTip = false;
const vm=new Vue({
    store: store, // TODO: 这里只有当我们应用了vuex才会被Vue自动管理。 --> store.js--->Vue.use()
    render: h => h(App)
}).$mount('#app');
console.log('vm',vm)

main.js

注释普通+和-
    // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值
    //     context.commit('JIA_jsxs', value);  // 通知mutations去
    //     console.log(context, value);
    // },
    // describe_jia(context, value) {
    //     context.commit('describe_jsxs', value);
    // },
import Vue from 'vue'  // 目的是调用: use()
import Vuex from 'vuex' // 引入插件vuex
Vue.use(Vuex)  // 应用Vuex
// 初始化状态->需要写成一个对象,要管理n多个组件的状态
const state_jsxs = {
    sum: 0,
    name: 'jsxs'
}
// 创建一个actions,值为一个对象,包含n个响应组件"动作"的函数---> 可以拿到分发的值
const actions_jsxs = {
    // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值
    //     context.commit('JIA_jsxs', value);  // 通知mutations去
    //     console.log(context, value);
    // },
    Async_jia(context, value) {
        setTimeout(() => {
            context.commit('Async_jsxs', value);
        }, 500)
    },
    // describe_jia(context, value) {
    //     context.commit('describe_jsxs', value);
    // },
    incrementOdd_jia(context, value) {
        context.commit('incrementOdd_jsxs', value);
    },
}
//  加工状态:  这里可以拿到状态设定的值
const mutations_jsxs = {
    JIA_jsxs(state_1, value) { // Todo: 这里的第一个参数是是一个对象里面可以获取state状态(),value是分发传递的值
        state_1.sum += value
    },
    Async_jsxs(state_2, value) {
        state_2.sum += value
    },
    describe_jsxs(state_3, value) {
        state_3.sum -= value
    },
    incrementOdd_jsxs(state_4, value) {
        if (state_4.sum % 2) {
            state_4.sum += value;
        }
    }
}
// getters中配置的是state经过加工后的值--- 类似于Vue中的computed
const getters_jsxs = {
    // TODO: 必须需要是返回值
    demo(state_5, value) {  // 第一个参数是: $state。第二个参数是传递过来的值。
        return state_5.sum*100
    }
}
// TODO: 创建Store 用于管理: state对象、mutations对象
const store = new Vuex.Store({
    state: state_jsxs,
    actions: actions_jsxs,
    mutations: mutations_jsxs,
    getters:getters_jsxs
})
// TODO: 抛出store
export default store

count.vue

调用的一定要添加参数
    <button @click="increment(n)">+</button>&nbsp;
    <button @click="describe(n)">-</button>&nbsp;
传递普通+
methods:{
    // increment(value) {
    //   this.$store.commit('JIA_jsxs',value)
    // },
        ...mapMutations({  //这里相当于上面的操作
      increment: "JIA_jsxs",
    }),
传递普通-    
    // describe() { //这里相当于上面的操作
    //   this.$store.commit("describe_jia", this.n);
    // },
    ...mapMutations({
      describe:'describe_jsxs'
    }),
}
<template>
  <div>
    <h2>当前求和未: {{ sum_t }}</h2>
    <h2>乘以100之后: {{ beiSum }}</h2>
    <h2>名字是: {{ usernames }}</h2>
    <!-- v-model.number意思是: 我们接受到的数据是数值 -->
    <select name="" id="" v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option></select
    >&nbsp; <button @click="increment(n)">+</button>&nbsp;
    <button @click="describe(n)">-</button>&nbsp;
    <button @click="incrementOdd">奇数再加</button>&nbsp;
    <button @click="incrementAsyn">异步加</button>&nbsp;
  </div>
</template>
<script>
// Todo: 这里需要使用到{}
import { mapGetters, mapState, mapMutations } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      n: 1, //
    };
  },
  computed: {
    // 为什么要用三个点,目的是把mapState给摊开。为什么要摊开,因为不能有 { {} }
    ...mapState({
      sum_t: "sum",
      usernames: "name",
    }),
    ...mapGetters({
      beiSum: "demo",
    }),
  },
  methods: {
    // 靠自己写方法、直接提交到Mutations
    // increment(value) {
    //   this.$store.commit('JIA_jsxs',value)
    // },
        ...mapMutations({
      increment: "JIA_jsxs",
    }),
    incrementAsyn() {
      this.$store.dispatch("Async_jia", this.n);
    },
    // describe() {
    //   this.$store.commit("describe_jia", this.n);
    // },
    ...mapMutations({
      describe:'describe_jsxs'
    }),
    incrementOdd() {
      this.$store.dispatch("incrementOdd_jia", this.n);
    },
  },
};
</script>
<style>
</style>

7.求和案列_Vuex中的mapActions

App.vue

<template>
  <div>
    <Count/>
  </div>
</template>
<script>
import Count from './components/Count.vue'
export default {
  name:'App',
  components:{
    Count,
  }
}
</script>
<style>
</style>

main.js

import Vue from 'vue'  // 引入阉割版本的vue
import App from './App.vue' // 引入App.vue组件
import store from './vuex/store'  // 引入vuex
Vue.config.productionTip = false;
const vm=new Vue({
    store: store, // TODO: 这里只有当我们应用了vuex才会被Vue自动管理。 --> store.js--->Vue.use()
    render: h => h(App)
}).$mount('#app');
console.log('vm',vm)

store.js

保持不动

import Vue from 'vue'  // 目的是调用: use()
import Vuex from 'vuex' // 引入插件vuex
Vue.use(Vuex)  // 应用Vuex
// 初始化状态->需要写成一个对象,要管理n多个组件的状态
const state_jsxs = {
    sum: 0,
    name: 'jsxs'
}
// 创建一个actions,值为一个对象,包含n个响应组件"动作"的函数---> 可以拿到分发的值
const actions_jsxs = {
    // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值
    //     context.commit('JIA_jsxs', value);  // 通知mutations去
    //     console.log(context, value);
    // },
    Async_jia(context, value) {
        setTimeout(() => {
            context.commit('Async_jsxs', value);
        }, 500)
    },
    // describe_jia(context, value) {
    //     context.commit('describe_jsxs', value);
    // },
    incrementOdd_jia(context, value) {
        context.commit('incrementOdd_jsxs', value);
    },
}
//  加工状态:  这里可以拿到状态设定的值
const mutations_jsxs = {
    JIA_jsxs(state_1, value) { // Todo: 这里的第一个参数是是一个对象里面可以获取state状态(),value是分发传递的值
        state_1.sum += value
    },
    Async_jsxs(state_2, value) {
        state_2.sum += value
    },
    describe_jsxs(state_3, value) {
        state_3.sum -= value
    },
    incrementOdd_jsxs(state_4, value) {
        if (state_4.sum % 2) {
            state_4.sum += value;
        }
    }
}
// getters中配置的是state经过加工后的值--- 类似于Vue中的computed
const getters_jsxs = {
    // TODO: 必须需要是返回值
    demo(state_5, value) {  // 第一个参数是: $state。第二个参数是传递过来的值。
        return state_5.sum*100
    }
}
// TODO: 创建Store 用于管理: state对象、mutations对象
const store = new Vuex.Store({
    state: state_jsxs,
    actions: actions_jsxs,
    mutations: mutations_jsxs,
    getters:getters_jsxs
})
// TODO: 抛出store
export default store

count.vue

methods{
    // incrementOdd(value) {
    //   this.$store.dispatch("incrementOdd_jia", value);
    // },
    // incrementAsyn() {
    //   this.$store.dispatch("Async_jia", this.n);
    // },
    ...mapActions({
      incrementOdd:'incrementOdd_jia',  //可以替换掉上面的
      incrementAsyn:'Async_jia'  // 可以替换上面的
    })
}
<template>
  <div>
    <h2>当前求和未: {{ sum_t }}</h2>
    <h2>乘以100之后: {{ beiSum }}</h2>
    <h2>名字是: {{ usernames }}</h2>
    <!-- v-model.number意思是: 我们接受到的数据是数值 -->
    <select name="" id="" v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option></select
    >&nbsp; <button @click="increment(n)">+</button>&nbsp;
    <button @click="describe(n)">-</button>&nbsp;
    <button @click="incrementOdd(n)">奇数再加</button>&nbsp;
    <button @click="incrementAsyn(n)">异步加</button>&nbsp;
  </div>
</template>
<script>
// Todo: 这里需要使用到{}
import { mapGetters, mapState, mapMutations,mapActions } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      n: 1, //
    };
  },
  computed: {
    // 为什么要用三个点,目的是把mapState给摊开。为什么要摊开,因为不能有 { {} }
    ...mapState({
      sum_t: "sum",
      usernames: "name",
    }),
    ...mapGetters({
      beiSum: "demo",
    }),
  },
  methods: {
    // 靠自己写方法、直接提交到Mutations
    // increment(value) {
    //   this.$store.commit('JIA_jsxs',value)
    // },
        ...mapMutations({
      increment: "JIA_jsxs",
    }),
    // describe() {
    //   this.$store.commit("describe_jia", this.n);
    // },
    ...mapMutations({
      describe:'describe_jsxs'
    }),
    // incrementOdd(value) {
    //   this.$store.dispatch("incrementOdd_jia", value);
    // },
    // incrementAsyn() {
    //   this.$store.dispatch("Async_jia", this.n);
    // },
    ...mapActions({
      incrementOdd:'incrementOdd_jia',
      incrementAsyn:'Async_jia'
    })
  },
};
</script>
<style>
</style>

8.求和案列_Vuex综合应用

App.vue

<template>
  <div>
    <Count/>
    <Person/>
  </div>
</template>
<script>
import Count from './components/Count.vue'
import Person from './components/Person.vue'
export default {
  name:'App',
  components:{
    Count,
    Person
  }
}
</script>
<style>
</style>

main.js

import Vue from 'vue'  // 引入阉割版本的vue
import App from './App.vue' // 引入App.vue组件
import store from './vuex/store'  // 引入vuex
Vue.config.productionTip = false;
const vm=new Vue({
    store: store, // TODO: 这里只有当我们应用了vuex才会被Vue自动管理。 --> store.js--->Vue.use()
    render: h => h(App)
}).$mount('#app');
console.log('vm',vm)

store.js

import Vue from 'vue'  // 目的是调用: use()
import Vuex from 'vuex' // 引入插件vuex
Vue.use(Vuex)  // 应用Vuex
// 初始化状态->需要写成一个对象,要管理n多个组件的状态
const state_jsxs = {
    sum: 0,
    name: 'jsxs'
}
// 创建一个actions,值为一个对象,包含n个响应组件"动作"的函数---> 可以拿到分发的值
const actions_jsxs = {
    // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值
    //     context.commit('JIA_jsxs', value);  // 通知mutations去
    //     console.log(context, value);
    // },
    Async_jia(context, value) {
        setTimeout(() => {
            context.commit('Async_jsxs', value);
        }, 500)
    },
    // describe_jia(context, value) {
    //     context.commit('describe_jsxs', value);
    // },
    incrementOdd_jia(context, value) {
        context.commit('incrementOdd_jsxs', value);
    },
}
//  加工状态:  这里可以拿到状态设定的值
const mutations_jsxs = {
    JIA_jsxs(state_1, value) { // Todo: 这里的第一个参数是是一个对象里面可以获取state状态(),value是分发传递的值
        state_1.sum += value
    },
    Async_jsxs(state_2, value) {
        state_2.sum += value
    },
    describe_jsxs(state_3, value) {
        state_3.sum -= value
    },
    incrementOdd_jsxs(state_4, value) {
        if (state_4.sum % 2) {
            state_4.sum += value;
        }
    }
}
// getters中配置的是state经过加工后的值--- 类似于Vue中的computed
const getters_jsxs = {
    // TODO: 必须需要是返回值
    demo(state_5, value) {  // 第一个参数是: $state。第二个参数是传递过来的值。
        return state_5.sum*100
    }
}
// TODO: 创建Store 用于管理: state对象、mutations对象
const store = new Vuex.Store({
    state: state_jsxs,
    actions: actions_jsxs,
    mutations: mutations_jsxs,
    getters:getters_jsxs
})
// TODO: 抛出store
export default store

count.vue

<template>
  <div>
    <h2>当前求和未: {{ sum_t }}</h2>
    <h2>乘以100之后: {{ beiSum }}</h2>
    <h2>名字是: {{ usernames }}</h2>
    <!-- v-model.number意思是: 我们接受到的数据是数值 -->
    <select name="" id="" v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option></select
    >&nbsp; <button @click="increment(n)">+</button>&nbsp;
    <button @click="describe(n)">-</button>&nbsp;
    <button @click="incrementOdd(n)">奇数再加</button>&nbsp;
    <button @click="incrementAsyn(n)">异步加</button>&nbsp;
  </div>
</template>
<script>
// Todo: 这里需要使用到{}
import { mapGetters, mapState, mapMutations,mapActions } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      n: 1, //
    };
  },
  computed: {
    // 为什么要用三个点,目的是把mapState给摊开。为什么要摊开,因为不能有 { {} }
    ...mapState({
      sum_t: "sum",
      usernames: "name",
    }),
    ...mapGetters({
      beiSum: "demo",
    }),
  },
  methods: {
    // 靠自己写方法、直接提交到Mutations
    // increment(value) {
    //   this.$store.commit('JIA_jsxs',value)
    // },
        ...mapMutations({
      increment: "JIA_jsxs",
    }),
    // describe() {
    //   this.$store.commit("describe_jia", this.n);
    // },
    ...mapMutations({
      describe:'describe_jsxs'
    }),
    // incrementOdd(value) {
    //   this.$store.dispatch("incrementOdd_jia", value);
    // },
    // incrementAsyn() {
    //   this.$store.dispatch("Async_jia", this.n);
    // },
    ...mapActions({
      incrementOdd:'incrementOdd_jia',
      incrementAsyn:'Async_jia'
    })
  },
};
</script>
<style>
</style>

Person.vue

获取总和

<template>
  <div class="p">
    <h2>我是Person组件</h2>
    <h3>求和为: {{sum}}</h3>
  </div>
</template>
<script>
name:'Person';
export default {
    computed:{
        sum(){
            return this.$store.state.sum;
        }
    }
}
</script>
<style>
.p{
    background-color: beige;
    padding: 10px
}
</style>

相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
228 2
|
11天前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
221 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
660 0
|
7月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
902 4
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
662 77
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
165 0
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
323 1
|
7月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
5月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
417 17
下一篇
开通oss服务