• 学习day59


    昨天学了插槽,但是没有即笔记了

    今天的是vuex

    总体来说,vuex就是一个共享单车,每个人都可以使用他,也可也对他进行反馈。即把一个数据列为vuex,然后每个组件可以使用这个对象,也可也反过来反馈他

    这一个设计是将A组件的一个数据作为公共来共享

    求和案例,纯vue

    APP.vue

    1. <template>
    2. <div class="container">
    3. <Count/>
    4. </div>
    5. </template>
    6. <script>
    7. import Count from './components/Count'
    8. export default {
    9. name:'App',
    10. components:{Count}
    11. }
    12. </script>

    Count.vue

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{sum}}</h1>
    4. <select v-model.number="n">
    5. <option value="1">1</option>
    6. <option value="2">2</option>
    7. <option value="3">3</option>
    8. </select>
    9. <button @click="increment">+</button>
    10. <button @click="decrement">-</button>
    11. <button @click="incrementOdd">当前求和为奇数再加</button>
    12. <button @click="incrementWait">等一等再加</button>
    13. </div>
    14. </template>
    15. <script>
    16. export default {
    17. name:'Count',
    18. data() {
    19. return {
    20. n:1, //用户选择的数字
    21. sum:0 //当前的和
    22. }
    23. },
    24. methods: {
    25. increment(){
    26. this.sum += this.n
    27. },
    28. decrement(){
    29. this.sum -= this.n
    30. },
    31. incrementOdd(){
    32. if(this.sum % 2){
    33. this.sum += this.n
    34. }
    35. },
    36. incrementWait(){
    37. setTimeout(()=>{
    38. this.sum += this.n
    39. },500)
    40. },
    41. },
    42. }
    43. </script>
    44. <style>
    45. button{
    46. margin-left: 5px;
    47. }
    48. </style>

    这一个是当使用vuex来设计时

    vuex原理

    store(其实就是下图Vuex):Actions,Mutations,State的父亲,它们三个之间的状态转换(灰色箭头的api)由store提供(store.dispatch,store.commit等等)
    Actions:一个普普通通的Object类型对象,vc的改变会先通过store.dispatch()将值传递给action。然后经由action通过store.commit()发送给Mutations。

    Actions还可以通过ajax和后端交互,就是下图中的Backend API,通过后端接口拿数据,也是组装到Action中

    如果不调用Backend API,VC可以直接将数据交给Mutations,绕开Actions。也就是说Actions是可以跳过的

    Mutations(n. 突变,变更):它是一个Object类型的对象。负责真正处理,加工修改数据,处理完成后将处理完成的数据传入State中

    Vue的开发工具,Devtools,监测的就是Mutations里的数据

    State:也是一个Object类型的对象,vuex会将里面的数据进行渲染,还给VC,更新VC

    VUEX的求和案例

    main.js

    1. import Vue from 'vue'
    2. import App from './App.vue'
    3. //引入vuex
    4. import Vuex from 'vuex'
    5. //引入store
    6. import store from './store'
    7. Vue.config.productionTip = false
    8. new Vue({
    9. el:"#app",
    10. render: h => h(App),
    11. store,
    12. beforeCreate(){
    13. Vue.prototype.$bus = this
    14. }
    15. })

    APP.vue

    1. <template>
    2. <div class="container">
    3. <Count/>
    4. </div>
    5. </template>
    6. <script>
    7. import Count from './components/Count'
    8. export default {
    9. name:'App',
    10. components:{Count}
    11. }
    12. </script>

    Count.vue

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{$store.state.sum}}</h1>
    4. <select v-model.number="n">
    5. <option value="1">1</option>
    6. <option value="2">2</option>
    7. <option value="3">3</option>
    8. </select>
    9. <button @click="increment">+</button>
    10. <button @click="decrement">-</button>
    11. <button @click="incrementOdd">当前求和为奇数再加</button>
    12. <button @click="incrementWait">等一等再加</button>
    13. </div>
    14. </template>
    15. <script>
    16. export default {
    17. name:'Count',
    18. data() {
    19. return {
    20. n:1, //用户选择的数字
    21. }
    22. },
    23. methods: {
    24. increment(){
    25. this.$store.dispatch('jia',this.n)
    26. },
    27. decrement(){
    28. this.$store.dispatch('jian',this.n)
    29. },
    30. incrementOdd(){
    31. this.$store.dispatch('jiaOdd',this.n)
    32. },
    33. incrementWait(){
    34. this.$store.dispatch('jiaWait',this.n)
    35. },
    36. },
    37. mounted(){
    38. console.log('Count',this)
    39. }
    40. }
    41. </script>
    42. <style>
    43. button{
    44. margin-left: 5px;
    45. }
    46. </style>

    index.js

    1. //该文件用于创建VUex中最为核心的store
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //应用vuex插件
    6. Vue.use(Vuex)
    7. //准备actions -用于响应组件中的动作
    8. const actions ={
    9. jia(context,value){
    10. console.log('actions中的jia被调用了')
    11. context.commit('JIA',value)
    12. },
    13. jian(context,value){
    14. console.log('actions中的jian被调用了')
    15. context.commit('JIAN',value)
    16. },
    17. jiaOdd(context,value){
    18. console.log('actions中的jiaOdd被调用了')
    19. if(context.state.sum % 2){
    20. context.commit('JIA',value)
    21. }
    22. },
    23. jiaWait(context,value){
    24. console.log('actions中的jiaWait被调用了')
    25. setTimeout(() => {
    26. context.commit('JIA',value)
    27. }, 500);
    28. }
    29. }
    30. //准备mutations -用于操作数据(state)
    31. const mutations={
    32. JIA(state,value){
    33. console.log('mutations中的JIA被调用了')
    34. state.sum +=value
    35. },
    36. JIAN(state,value){
    37. console.log('mutations中的JIAN被调用了')
    38. state.sum -=value
    39. },
    40. }
    41. //准备state -用于存储数据
    42. const state ={
    43. sum:0 //当前的和
    44. }
    45. //创建并暴露store
    46. export default new Vuex.Store({
    47. actions,
    48. mutations,
    49. state,
    50. })

  • 相关阅读:
    修改el-tab标签页的label默认样式(插槽)
    大数据(5n)ClickHouse异于平常SQL的语法
    螺杆支撑座大作用
    渗透测试--2.漏洞探测和利用
    CompletableFuture异步优化代码
    又一款机器学习模型解释神器:LIME
    从零开始编写一个 Python 异步 ASGI WEB 框架
    3-3、python中内置数据类型(集合和字典)
    Java认识异常(超级详细)
    大数据Hadoop入门教程 | (一)概论
  • 原文地址:https://blog.csdn.net/2301_76386566/article/details/132596950