vuex小例子
时间:2022-06-26
本文章向大家介绍vuex小例子,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
main.js
import Vue from 'vue'
import App from './App'
import Vuex from 'vuex'
Vue.use(Vuex);
Vue.config.productionTip = false;
const store = new Vuex.Store({
state:{
products:[
{name:'苹果',price:6},
{name:'草莓',price:10},
{name:'火龙果',price:4},
{name:'芒果',price:12.5},
{name:'橘子',price:3.9}
],
},
getters:{
saleProducts:(state)=>{
return state.products.map(p=>{
return {
name:p.name,
price:p.price/2
}
})
}
},
mutations:{
riseInPrice(state,payload){
state.products.forEach(p=>{
p.price-=payload;
})
},
},
actions:{
//Action 函数不是直接变更状态,所以他没有state参数
riseInPriceAsync(context,payload){
//Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
setTimeout(()=>{
context.commit('riseInPrice',payload);
},2000)
}
}
});
new Vue({
el: '#app',
store,
components: { App },
template: '<App/>'
});
App.vue
<template>
<div id="app">
<ProductListOne></ProductListOne>
<ProductListTwo></ProductListTwo>
</div>
</template>
<script>
import ProductListOne from "./components/ProductListOne";
import ProductListTwo from "./components/ProductListTwo";
export default {
name: 'App',
components: {
ProductListTwo,
ProductListOne
}
}
</script>
<style>
</style>
ProductListOne.vue
<template>
<fieldset>
<legend><h1>商品列表一</h1></legend>
<ul>
<li v-for="pro in $store.state.products">
<span>{{pro.name}}</span>
<span>{{pro.price}}</span>
</li>
</ul>
<hr>
<ul>
<li v-for="pro in $store.getters.saleProducts">
<span>{{pro.name}}</span>
<span>{{pro.price}}</span>
</li>
</ul>
<button @click="sale">大减价</button>
<button @click="waitSale">延时减价</button>
</fieldset>
</template>
<script>
export default {
name: "ProductListOne",
methods:{
sale(){
//不能直接通过$store调用mutations里的方法。需要使用$store.commit触发mutations
//还可以给commit传入额外的参数灵活控制函数的执行
this.$store.commit('riseInPrice',0.5);
},
waitSale(){
//触发action,使用的是dispatch方法
this.$store.dispatch('riseInPriceAsync',0.3);
}
}
}
</script>
<style scoped>
</style>
ProductListTwo.vue
<template>
<fieldset>
<legend><h1>商品列表二</h1></legend>
<ul>
<li v-for="pro in products">
<span>{{pro.name}}</span>
<span>{{pro.price}}</span>
</li>
</ul>
</fieldset>
</template>
<script>
export default {
name: "ProductListTwo",
data(){
return {
products:this.$store.state.products
// products:this.$store.getters.saleProducts,
}
}
}
</script>
<style scoped>
</style>
- 《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
- Knockout.js是什么?
- 简单方法检测远端用户的反病毒软件
- 使用 JS 构建跨平台的原生应用(一):React Native for Android 初探
- 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
- 在Windows上安装Jekyll
- 如何解决ajax跨域问题
- 基础篇章:React Native之 Image 的讲解
- 防守式编程的艺术
- Git 简单命令,木有高深内容
- 基础篇章:React Native之 ScrollView 的讲解
- 常用 Git 命令清单
- 如何将配置spring文件指定名字,指定位置
- 基础篇章:React Native 之 TextInput 的讲解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用Canvas画一个刮刮乐
- WebSocket三问—腾讯三问
- BroadcastReceiver三问—美团真题
- 小程序调用拍照功能
- Jetpack中可能被你忽视的—行为组件简析
- pytest封神之路第零步 快速入门
- beego(一) beego 入门
- javascript预编译(执行期的上下文)
- Elasticsearch评分相关度算法解析
- Netty入门教程——认识Netty
- Linux下的包过滤软件:iptables剖析
- rxjs fromEvent的实现
- rxjs switchMap的实现原理
- rxjs里scan operator的执行研究
- rxjs pipe和map组合的一个实际例子的单步调试