美文网首页
vuex-使用小demo

vuex-使用小demo

作者: tutututudou | 来源:发表于2022-07-02 00:56 被阅读0次

纯vue
test.vue

<template>
  <div>
   <h2>结果是:{{sum}}</h2>
   <br>
   <select v-model.number="n">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
   </select>
   <button @click="jia">+</button>
   <button @click="jian">-</button>
   <button @click="oddJia">基数加偶不加</button>
   <button @click="wait">等一等再加</button>
  </div>
</template>

<script>
export default {
 data(){
  return {
   n:1,//用户选择的数字
   sum:0
  }
 },
 methods:{
 jia(){
  this.sum += this.n
 },
 jian(){
this.sum -= this.n
 },
 oddJia(){
  if(this.sum % 2){
   this.sum += this.n
  }
 },
 wait(){
  setTimeout(() => {
   this.sum += this.n
  },500)
 }
 }
}
</script>

vuex版本

确定把公共属性是sum

index.js

// 存储结果状态
const state={
 sum:0
}

test.vue

 methods:{
 jia(){
  // this.sum += this.n
  console.log(this)
 }

打印this查看store 这个API,调用其方法


store方法.PNG

actions这些方法方便做业务,方便复用,可以一直使用dispatch方法

  • test.vue
 jia(){
  // this.sum += this.n
  this.$store.dispatch('jia',this.n)
 }

通过调用dispatch这个方法,能调用actions这个对象里面的方法
第一个参数:调用的方法名
第二个参数:给调用的方法传参数

actions这个对象新建一个方法提供dispatch这个方法,并和他的调用名一致,有网络请求写在这里更清晰
index.js

//响应组件请求,存储请求动作
const actions={
 jia(context,value){
  console.log(context)
  console.log(value)
 }
}
actions.PNG
  • jia(context,value)
    actions里面的方法名必须和dispatch第一个参数一致,因为actions就是为dispatch方法而生的
  • 第一个参数:
    是一个小的store,也可以叫文档上下文,因为要把可能使用的方法给jia这个方法,不然actions里面的方法无法把动作提交给下一个对象mutations
  • 第二个参数:
    这是dispatch提交给jia这个方法的值

jia提交请求给mutations,调用commit这个方法

//响应组件请求,存储请求动作
const actions={
 jia(context,value){
 //  console.log(context)
 //  console.log(value)
 context.commit('JIA',value)
// 第一个参数:方法名,第二个参数:值
 }
}

jia这个函数调用commit提交一个方法和数据给mutations这个对象,所以mutations也有有一个一模样方法来接收数据

//操作state数据
const mutations={
 JIA(state,value){
 console.log(state)
  console.log(value)
 }
}
mutation.PNG
  • JIA(state,value)
    第一个参数:就是state对象里面的内容
    第二个参数:就是前传过来的值
//操作state数据
const mutations={
 JIA(state,value){
  // console.log(state)
  // console.log(value)
  state.sum += value
 }
}
// 存储结果状态
const state={
 sum:0
}

//显示页面也要改
 <h2>结果是:{{$store.state.sum}}</h2>

test.vue

<template>
  <div>
   <h2>结果是:{{$store.state.sum}}</h2>
   <br>
   <select v-model.number="n">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
   </select>
   <button @click="jia">+</button>
   <button @click="jian">-</button>
   <button @click="oddJia">基数加偶不加</button>
   <button @click="wait">等一等再加</button>
  </div>
</template>

<script>
export default {
 data(){
  return {
   n:1,//用户选择的数字
   sum:0
  }
 },
 methods:{
 jia(){
  // this.sum += this.n
  this.$store.dispatch('jia',this.n)
 },
 jian(){
// this.sum -= this.n
this.$store.dispatch('jian',this.n)
 },
 oddJia(){
  // if(this.sum % 2){
  //  this.sum += this.n
  this.$store.dispatch('oddJia',this.n)
  // }
 },
 wait(){
//   setTimeout(() => {
//   //  this.sum += this.n
this.$store.dispatch('wait',this.n)
//   },500)
 }
 }
}
</script>

index.js

import Vuex from 'vuex'
//导入vuex
import Vue from 'vue'
// 使用Vuex
Vue.use(Vuex)

//响应组件请求,存储请求动作
const actions={
 jia(context,value){
 //  console.log(context)
 //  console.log(value)
 context.commit('JIA',value)
 },
 jian(context,value){
  context.commit('JIAN',value)
 },
   oddJia(context,value){
    // if(this.sum % 2){
     context.commit('ODDJIA',value)
    // }
   },
   wait(context,value){
    setTimeout(() => {
     context.commit('WAIT',value)
    },500)
   }
}
//操作state数据
const mutations={
  JIA(state,value){
  // console.log(state)
  // console.log(value)
  state.sum += value
  },
   JIAN(state,value){
      state.sum -= value
   },
   ODDJIA(state,value){
   if(state.sum % 2){
      state.sum += value
   }
   },
   WAIT(state,value){
   setTimeout(() => {
      state.sum += value
   },500)
   }

}
// 存储结果状态
const state={
 sum:0
}
export default new Vuex.Store({
 actions,
 mutations,
 state
})

可以处理一些问题,如果不经过actions处理,可以在组件中直接调用mutations里面的commit方法,这样actions就不要再commit了
test.vue

<template>
  <div>
   <h2>结果是:{{$store.state.sum}}</h2>
   <br>
   <select v-model.number="n">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
   </select>
   <button @click="jia">+</button>
   <button @click="jian">-</button>
   <button @click="oddJia">基数加偶不加</button>
   <button @click="wait">等一等再加</button>
  </div>
</template>

<script>
export default {
 data(){
  return {
   n:1,//用户选择的数字
   sum:0
  }
 },
 methods:{
 jia(){
  // this.sum += this.n
  // this.$store.dispatch('jia',this.n)
  this.$store.commit('JIA',this.n)//这里变化了
 },
 jian(){
// this.sum -= this.n
// this.$store.dispatch('jian',this.n)
this.$store.dispatch('JIAN',this.n)//这里变化了
 },
 oddJia(){
  // if(this.sum % 2){
  //  this.sum += this.n
  this.$store.dispatch('oddJia',this.n)
  // }
 },
 wait(){
//   setTimeout(() => {
//   //  this.sum += this.n
this.$store.dispatch('wait',this.n)
//   },500)
 }
 }
}
</script>

index.vue

import Vuex from 'vuex'
//导入vuex
import Vue from 'vue'
// 使用Vuex
Vue.use(Vuex)

//响应组件请求,存储请求动作
const actions={
//  jia(context,value){
 //  console.log(context)
 //  console.log(value)
//  context.commit('JIA',value)
//  },//这里变化了
//  jian(context,value){
//   context.commit('JIAN',value)
//  },//这里变化了
   oddJia(context,value){
    // if(this.sum % 2){
     context.commit('ODDJIA',value)
    // }
   },
   wait(context,value){
    setTimeout(() => {
     context.commit('WAIT',value)
    },500)
   }
}
//操作state数据
const mutations={
  JIA(state,value){
  // console.log(state)
  // console.log(value)
  state.sum += value
  },
   JIAN(state,value){
      state.sum -= value
   },
   ODDJIA(state,value){
   if(state.sum % 2){
      state.sum += value
   }
   },
   WAIT(state,value){
   setTimeout(() => {
      state.sum += value
   },500)
   }

}
// 存储结果状态
const state={
 sum:0
}
export default new Vuex.Store({
 actions,
 mutations,
 state
})

相关文章

  • vuex-使用小demo

    纯vuetest.vue vuex版本 确定把公共属性是sum index.js test.vue 打印this查...

  • Vuex-基本使用

    引用 在一个模块化的打包系统中,您必须显式地通过 Vue.use() 来安装 Vuex: 当使用全局 script...

  • volley框架使用小Demo

    MainActivity } activity_main.xml 点击按钮 hello world 替换为请求网址...

  • 撸个Flutter个人页小demo

    最近闲来无事,撸个小demo,主要是对Flutter框架Dart语言的基础使用 Demo 连接:https://g...

  • iOS 小知识6

    iOS 小知识6 load underlying module 有些 github 上面的 demo 使用 coc...

  • Spring学习(一)----Spring xml解析

    demo 本文使用一个小的demo来介绍spring的操作过程 代码结构 xml 读取 spring开始的入口就是...

  • HTML5拖拽上传

    传统拖拽效果小demohtml5实现拖拽小demo调查问卷小demo拖拽拼图小demo拖拽上传小demo h5拖拽...

  • Android Canvas 小案例组合动画

    概述 本文承接Android Canvas总结下述小案例仅为Canvas的api的使用总结,非项目使用demo!!...

  • 使用Opencv+Python的AR小demo

    使用Opencv+Python的AR小demo[https://blog.csdn.net/weixin_4433...

  • 5.call和ret指令

    call和ret指令使用: 实现函数返回值: demo1:使用ds demo2:使用ds中的别名 demo3:通用...

网友评论

      本文标题:vuex-使用小demo

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