项目搭建

npm init vite-app GxShujuku
cd GxShujuku
npm i
npm i vue-router

npm i vuex // 这一句是这节课的关键

新建store

①配置store
src文件下 store=》index.js
import { createStore } from 'vuex'

const store = createStore({}) //创建状态管理库

export default store; //对外抛出 store对象

②在main.js中挂载store

import router from './router/index.js'
import store from './store/index.js'
//将配置好的store对象与当前vue项目相关联
createApp(App).use(router).use(store).mount('#app')

状态管理库Vuex是一个专门为Vue.js应用程序开发的状态管理库
状态就是指组件之间共享的数据

一、vuex 获取数据的两种方式

Ⅰ、直接获取state数据

①Home.vue

<p>count:{{ getCount}}</p>

<p v-for="(item,i) in getUsers" :key="i">
{{item.name}}--{{item.age}}--{{item.score}}
</p>

<script>
export default {
name: "Home",
computed:{
getUsers(){
return this.$store.state.users;//这一句是重点
},
getCount(){
return this.$store.state.count;//这一句是重点
}
},
}
</script>

②store/index.js 文件

import {createStore} from 'vuex'
//创建状态管理库
const store = createStore({
// state:保存所有组件之间共享的数据
state:{
count:"666", // 获取count
users:[

{name:'李白',age:"50",score:85},
{name:'杜甫',age:"74",score:61},
{name:'白居易',age:"44",score:70},
]
}
})

//对外抛出 store对象
export default store;

Ⅱ、 对象展开运算符获取state数据

①Home.vue
<p>count:{{count}}</p>
<p v-for="(item,i) in users" :key="i">
{{item.name}}--{{item.age}}--{{item.score}}
</p>
</div>

</template>

<script>
import {mapState} from 'vuex'
export default {
name: "Home",
computed:{

// 对象展开运算符
...mapState(['count','users']) //这一句是重点
},
}
</script>

<style scoped>

</style>

二、获取getters:

①直接获取getters
<p>count:{{ count}}</p>-->
<p v-for="(item,i) in getAdults" :key="i"> //重点在这个getAdults上
{{item.name}}--{{item.age}}--{{item.score}}
</p>

<script>
export default {
name: "Home",
computed:{
//1、getters直接获取
getAdults(){ //重点在这一句
return this.$store.getters.adults;
}
},
}
</script>

②通过对象es6展开运算符 获取getters

<p>count:{{ count}}</p>
<p v-for="(item,i) in adults" :key="i"> //重点在这一句
{{item.name}}--{{item.age}}--{{item.score}}
</p>

<script>
import {mapState,mapGetters} from 'vuex'
export default {
name: "Home",
computed:{
...mapGetters(['adults']) //重点在这一句
},
}
</script>

三、子组件通过 mutations 修改state
①commit直接修改state
About.vue

<template>
<div> <h1> 我踏马莱拉</h1></div>
<p>count:{{count}}</p>
<p><button @click="change">修改count的数据</button></p>
</template>

import {mapState} from 'vuex'
export default {
name: "About",
computed:{
// 对象展开运算符
...mapState(['count']) //这一句是重点
},
methods:{
change(){
//在组件中触发 store中mutations的方法 change函数触发changeCount函数修改count
this.$store.commit('changeCount') //这一句是重点 调用函数
this.changeCount();
},

}
}

★ store中四个重要组成部分
我们使用comit触发mutations中定义的函数(修改state中同步数据)
使用dispatch触发actions中定义的函数(修改state中异步数据)

①第一个state
state:{
count:10,
users:[]
},

②第二个getters
//getters相当于store对象计算属性,主要对state的数据进行过滤
getters:{
adults(state){ // state指的就是所有 ①中的数据
return state.users.filter(function(item){
return item.age >=18;
})
}
}

③第三个mutations
mutations:{ //这玩意能修改state数据
changeCount(state){ // state:指的是store对象中的state
state.count=15;
},

④ 第四个dispath
直接使用this.$store.dispath('xxxxx','传递的参数')
使用对象展开运算符 ...mapActions(['xxx','xxx'])

〇完整版 store/index.js 文件

import {createStore} from 'vuex'
//创建状态管理库
const store = createStore({
// state:保存所有组件之间共享的数据
state:{
count:"666", // 获取count
user:{
id:1,
name:'李四',
age:999
},

users:[
{name:'庄淑娟',age:18,score:100,},
{name:'赵志冉',age:19,score:100},
{name:'李白',age:50,score:85},
{name:'杜甫',age:74,score:61},
{name:'白居易',age:44,score:70},
]
},
//相当于store对象计算属性,主要对state的数据进行过滤
getters:{
adults(state){ // state指的就是所有 ①中的数据
return state.users.filter(function(item){
return item.age >=20;
})
}

},
//mutations:定义了修改state数据的同步方法
mutations:{ //这玩意能修改state数据
changeCount(state){ // state:指的是store对象中的state
state.count=15;
},

changeUser(state,payload){ // 传一组值 payload进来
state.user.id = payload.id;
state.user.name = payload.name;
state.user.age = payload.age;

}
}
})

//对外抛出 store对象
export default store;

四、

要求: 项目实例子组件 About.vue 实现 store状态和管理器数据
①About.vue
<template>
<div> <h1> 我踏马莱拉</h1></div>
<p> {{user.id}}--{{user.name}}--{{user.age}}</p> //这一行是重点
</template>
<script>
import {mapState} from 'vuex' //这一行是重点
export default {
name: "About",
computed:{
// 对象展开运算符
...mapState(['user']) //这一句是重点
},
}
</script>
<style scoped>
</style>

②store/index.js

import {createStore} from 'vuex'
//创建状态管理库
const store = createStore({
// state:保存所有组件之间共享的数据
state:{
count:"666", // 获取count

user:{ //这一行是重点
id:1,
name:'李四',
age:999
},

users:[

{name:'李白',age:50,score:85},
{name:'杜甫',age:74,score:61},
{name:'白居易',age:44,score:70},
]
},
//相当于store对象计算属性,主要对state的数据进行过滤
getters:{
adults(state){ // state指的就是所有 ①中的数据
return state.users.filter(function(item){
return item.age >=20;
})
}

}
})
//对外抛出 store对象
export default store;

store数据仓库的更多相关文章

  1. ExtJs 之 ComboBox级联使用

    刚接触ExtJs不到一周,项目使用ExtJs框架,有个版块用到了combobox的级联(两级),遇到了一系列的问题,两天来一直查API.网络资料,终于解决了. 先列出遇到的一系列问题(也许你也遇到过! ...

  2. Vue(SPA) WebPack模块化打包、SEO优化(Vue SSR服务端同构直出)、全浏览器兼容完整解决方案

    白驹过隙,时光荏苒 大概去年这个时候写了angular 结合webpack的一套前端方案,今年此时祭出vue2结合webpack的一套前端方案. 明年的这个时候我又是在做什么... 读在最前面: 1. ...

  3. Redux概览

    简介 Redux 是一个有用的架构 Redux 的适用场景:多交互.多数据源 工作流程图 action 用户请求 //发出一个action import { createStore } from 'r ...

  4. Abp Vnext Vue3 的版本实现

    基于ABP Vnext的二次开发,前端 vue3.0,Typescript,Ant Design Vue ,Vben Admin 的后台管理框架. 技术点 Net Core5.0 ABP Vnext ...

  5. Vben Admin 源码学习:项目初始化

    0x00 前言 Vue-Vben-Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案考. 本系列本着学习参考的目 ...

  6. SQL Server Column Store Indeses

    SQL Server Column Store Indeses SQL Server Column Store Indeses 1. 概述 2. 索引存储 2.1 列式索引存储 2.2 数据编码和压缩 ...

  7. Oracle 12.1.0.2 New Feature翻译学习【In-Memory column store内存列存储】【原创】

    翻译没有追求信达雅,不是为了学英语翻译,是为了快速了解新特性,如有语义理解错误可以指正.欢迎加微信12735770或QQ12735770探讨oracle技术问题:) In-Memory Column ...

  8. 场景4 Data Warehouse Management 数据仓库

    场景4 Data Warehouse Management 数据仓库 parallel 4 100% —> 必须获得指定的4个并行度,如果获得的进程个数小于设置的并行度个数,则操作失败 para ...

  9. 在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)

    传统的关系数据库服务引擎往往并不是对超大量数据进行分析计算的最佳平台,为此,SQL Server中开发了分析服务引擎去对大笔数据进行分析计算.当然,对于数据的存放平台SQL Server数据库引擎而言 ...

  10. 数据仓库之ETL漫谈

    ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取.转换和加载. 大多数据仓库的数据架构可以概括为: 数据源-->ODS(操作型数据存储)--& ...

随机推荐

  1. EasyUI异步Tree默认请求id获取不到问题

    在做淘淘商城项目过程中,在新增商品-选择类目时,使用EasyUI的异步Tree功能,根据视频教程封装了一个common pojo--EUTreeNode对象,属性值取parentId(id).text ...

  2. C语言学习--指针数组

    #include<stdio.h> //指针数组, 数组里面的每一个元素都是指针 int main() { int a = 10; int b = 20; int c = 30; // i ...

  3. 使用chrome自带的实时字幕功能

    https://www.youtube.com/watch?v=upm9qCMT96Q

  4. 1996. 游戏中弱角色的数量 (Medium)

    问题描述 1996. 游戏中弱角色的数量 (Medium) 你正在参加一个多角色游戏,每个角色都有两个主要属性: 攻击 和 防御 .给你一个二维整数数组 properties ,其中 properti ...

  5. 【剑指Offer】【数组】顺时针打印矩阵

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...

  6. vue页面多表单验证保存

    页面中有多个表单需要验证,可以使用以下方法: export default { data: { return { addOrEditVo: { name: '', description: '', a ...

  7. Java方法之递归详解【重点】

    递归详解 A方法调用B方法,我们很容易理解! 递归就是:A方法调用A方法!就是自己调用自己. 利用递归可以用简单的程序来解决一些复杂的问题.它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较 ...

  8. Mac下Apache Tomcat安装配置技巧

    我们在MAC系统中查看网页时,一般都要使用到tomcat,这是因为appache只支持静态网页,但像asp,php,cgi,jsp等动态就需要tomcat来处理.那么该怎么在自己的MAC中安装tomc ...

  9. 5. Python 函数

    函数:(方法.功能) 作用:1.提高代码的复用性,2.让代码更简洁 函数命名方法   函数不调用是不会被执行的     def calc(a,b): #形参 #位置参数,必填,否则报错 res = a ...

  10. [2007年NOIP普及组] Hanoi双塔问题

    给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将 这些国盘移到C柱上,在移动过 ...