项目搭建

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. Objectarx2016在VS2012里面创建失败的解决办法

    在网上找了很多办法,有说需要管理员权限运行msi的,还有什么ucs的,经过我的尝试,最后找到了办法 解决办法是,在vs2012的根目录下>>vc>>vcprojects> ...

  2. 字符串散列成GUID

    https://stackoverflow.com/questions/2190890/how-can-i-generate-a-guid-for-a-string

  3. pytorch MNIST加载已下载的数据集出现问题及解决方法

    import torch import torch.nn as nn from torch.autograd import Variable import torchvision import tor ...

  4. Vue项目打包报错 error TS6504

    此处提醒:项目是vite还是vue/cli,打包有区别 打包报错问题: 原因: package.json中,build配置vue-tsc的问题,把对应的命令给删掉: . 语法检查问题: 要么<s ...

  5. Elasticsearch集群部署和运维命令

    Elasticsearch集群部署 下载tar包 在"https://www.elastic.co/cn/downloads/elasticsearch"页面,有 past rel ...

  6. 781. 森林中的兔子 (Medium)

    问题描述 781. 森林中的兔子 (Medium) 森林中有未知数量的兔子.提问其中若干只兔子 "还有多少只兔子与你(指被提问的兔子)颜色相同?" ,将答案收集到一个整数数组 an ...

  7. 打卡node day04--express-get.post.路由

    1.基本使用 npm i express 2.请求 get: post: express 不能直接解析请求体,所以需要第三方插件 ---->body-parser 使用 npm install ...

  8. python爬取知乎的网站内容

    #获取知乎的网站内容 import requests #数据请求模块 第三方模块 pip install requests import re #正则表达式 #网页head头 heads = { 'U ...

  9. k8s master高可用

    每台master都要部署haproxy,keepalived keepalived 配置文件:! Configuration File for keepalivedglobal_defs { rout ...

  10. Carthage 使用介绍

    1.安装 Carthage 安装 brew install carthage 检测当前版本 carthage version 升级至最新版本 brew upgrade carthage 2.如果更新出 ...