项目搭建

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. lxml库和BeautifulSoup库常用点小结

    算是本人的学习笔记吧,仅供个人学习使用. 以下内容摘自<Python3网络爬虫开发实战--崔庆才著> 1.lxml库 XPath 常用规则: 表达式 描述 nodename 选取此节点的所 ...

  2. SAP日志表 CDHDR和CDPOS

    1. 标准日志表CDHDR 和 CDPOS OBJECTCLAS = 'INFOSATZ' 信息记录 OBJECTCLAS = 'BANF' 采购申请 OBJECTCLAS = 'EINKBELEG' ...

  3. redis常用命令之string&list

    redis常用操做 string key操作 string <key:value> set name johnget name list setnx <key value>se ...

  4. APP的文件数据直传腾讯云COS实践

    简介 本文主要介绍基于腾讯云对象存储COS,如何快速实现一个app的文件直传功能.您的服务器上只需要生成和管理访问密钥,无需关心细节,文件数据都存放在腾讯云 COS 上. 架构说明 对于app应用,把 ...

  5. 光纤加速计算 383-高速信号处理板 XCKU060的双路QSFP+光纤PCIe 卡 XCKU060板卡

    基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡 一.板卡概述 本板卡系北京太速科技自主研发,基于Xilinx UltraScale Kintex系列FPGA   ...

  6. python中使用to_excel时如何不覆盖原有数据来新建sheet页

    经常通过各种三方库操作Excel时,会遇到各种问题.这个库不支持这个方法,那个库支持但是又会丢失原来的数据....都是问题! . . . import openpyxl import pandas a ...

  7. C/C++ FILE 和 fstream 用法详解

    FILE 是C语言自带的文件操作结构体, fstream 是C++的文件操作类,两者使用都比较常见,且用法比较类似,再次记录. 功能 FILE fstream 打开文件 FILE* fopen(cha ...

  8. js 秒转时分秒

    formateSeconds(endTime){ let secondTime = parseInt(endTime)//将传入的秒的值转化为Number let min = 0// 初始化分 let ...

  9. elmentui 表单验证问题

    <template> <div class="container"> <el-form ref="ruleForm" :model ...

  10. 点击div实现选中效果

    先上一份效果图.原来的checked多选框还是存在的,我只不过隐藏了,让他的整个div的范围都是可以点击的,右上角三个点是可以删除当前元素,左下角的播放按钮可以点击播放语音,主要是利用z-index把 ...