【vuex】 自己乱七八糟看教程...

2024-02-07 20:32

本文主要是介绍【vuex】 自己乱七八糟看教程...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

教程来源  https://www.jianshu.com/p/120eaf50331c 整理是为了自己看着方便 qaq

先声明  大部分不是自己写的 _(:з」∠)_ 一个网站教程 和视频 只为了记录

第一节 入门 

大概就是 

1 npm install vuex --save

2  需要显式引用 qaq

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

3 Vuex 依赖 Promise。如果你支持的浏览器并没有实现 Promise (比如 IE),那么你可以使用一个 polyfill 的库,例如 es6-promise.。也可以自己构建啊什么的。。

npm install es6-promise --save # npm
yarn add es6-promise # Yarn

4 Vuex 的目的是为了管理共享状态,为了达到这个目的,它制定了一系列的规则,比如修改数据源 state、触发 actions 等等,都需要遵循它的规则,以此来达到让项目结构更加清晰且易于维护的目的。

比如两个文件都想操控count  而且修改后 是双方都要第一个知道

那 把数据源 count 剥离开来,用一个全局变量或者全局单例的模式进行管理,这样不就在任何页面都可以很容易的取到这个状态了  大概就是这样了

Vuex 的目的是为了管理共享状态,为了达到这个目的,它制定了一系列的规则,比如修改数据源 state、触发 actions 等等,都需要遵循它的规则,以此来达到让项目结构更加清晰且易于维护的目的。

5  大项目vuex  小项目无所谓 中的用:

共享单车  指代的是官方中的一个简单的 store 模式,其实就是一个单纯的全局对象。

6 每一个 Vuex 应用的核心就是 store(仓库)。store 基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。

【更改不能直接更改 你懂8  你要提交commit  才能改变这个全局的数据

store.commit('increment') // 调用 mutations 中的方法
console.log(store.state.count) // -> 1

这样来 意图更明显  qaq 总之你懂8

第二节  这里讲state  和getter。

1  Vuex 的内脏由五部分组成:State、Getter、Mutation、Action 和 Module  

state 和mutation 是必要的

2 Vuex 使用的是「单一状态树」

等下自己复述一下 qvq

单一,不会乱套,可以直接撸到树的某个位置,以及取得状态快照。。。巴拉巴拉

3 怎么获取展示状态?(应用

 【注意不能在data里 和模板里 它们不能访问 /  直接刷新

所以我们用 计算属性。

 computed: {count () {return  store.state.count    }}

每当 store.state.count 变化的时候, 都会重新求取计算属性,并刷新界面。

4  也可以直接注入每个子组件:哦!         QAQ  app.vue吧 通过在根实例中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中

  return this.$store.state.count

这样就可以直接访问到 不要自己引入了(全局的,不仅全局 而且帮你做好了qvq

5 getter: 提供数据处理来满足我们的需求qvq

可以把它当成 store 中的计算属性(computed)。

getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

 

getters: {

  // Getter 还也可以接收 getters 作为第二个参数

  dateLength: (state, getters) => {

    return getters.weekDate.length;

  }

}

还会将 store. getter 对象暴露出去  可以访问 这个时候这样用

computed: {weekDate () {return this.$store.getters.weekDate}
}

是不是很方便qvq  避免了写一堆无用的

6  然后 如果想找不一样的格式,就把getter写成函数一样的

getters: {// 返回一个函数,就可以传参了weekDate: (state) => (fm) => {    return moment(state.date).format(fm ?fm :'dddd');}}

用的时候   我感觉是 如果fm有的话 就用fm  没的话 就是dddd呗 /? qvq  总之这个moment 是个外部库

store.getters.weekDate('MM Do YY')

第三讲 Vuex旗下的Mutation

1 只有mutation 可以动 state 

每个mutation 都有一个 字符串的事件类型 type 和 一个回调函数 handler

2 只能使用store.commit ('increase' ) 只能使用store.commit来提交这个mutation方法 qvq

mutations: {increment (state, n) {state.count += n}
}// 调用
store.commit('increment', 10)
// 2、整个对象都作为载荷传给 mutation 函数 store.commit({ type: 'increment', amount: 10 })

大概state是它的默认参数吧qvq  所以这么写了....

后面这个东西叫 payload "载荷"

3 对于对象 的 修改规则,稍微麻烦一点qvq  

如果是动态的修改 需要遵循vue的规则  像什么   Vue.set(state.student, 'age', 18)  (不过我估计也不会这么改qwq 这个是新增的

修改还是 state。students. age=19  

4 使用常量  qvq

就是使用常量来替代 mutation 事件的名字。为啥呢qvq....  因为只是方法名的话容易乱,  这里我不是很懂qvq

Mutation 必须是同步函数。为什么呢?

前面说了,我们之所以要通过提交 mutation 的方式来改变状态数据,是因为我们想要更明确地追踪到状态的变化。如果像下面这样异步的话: api.callAsyncMethod(() => 这样子就不太行的意思qvq

第四讲  Vuex旗下的Action

我看不懂啦啊........!!! 看不懂了

一个组件要获取多个状态的时候就用mapstate

  computed: mapState({// 箭头函数可使代码更简练a: state => state.a,b: state => state.b,c: state => state.c,

而且可以简化qvq  我不看了

==============

实战 我们也来随便看一下吧qvq(也就是 第六讲

1 先在app.vue里建立了一个  然后在src里  写了一个store.js

是js里哦,这边  vue。use(vuex)

然后 Vuex.store

state我们有  mutation也有  (里面有一个set那么 果然state是默认参数,其他的是可选可传入的

actions 大概是为了给异步提交 异步提交用的 qvq 它也是commit提交的。

2 在main.js 里面引入store  并且全局注册

3 app.vue 也要引入  mapxxxx...???... 

可以 this.$store.state.moduleA.text 这种方式来直接访问模块中的 state 数据。module

 

=====================这里跟着视频做了

vuex就是一个数据仓库 或者状态

explot   default 给暴露出去 qvq

$store . state .count

alt   +  shift  + 下方向键 复制本行

这个视频.....emmm  by技术胖 jspang 还行吧就;... 

还真是实际用的,那demo还是要写的 qvq

4.1视频

store.js  然后模板在count.vue里面

Vue.use(Vuex)

const state={

    count: 4

}

const mutations={

    add(state){

        state.count++;

    },

    reduce(state){

        state.count--

    },

}

export default new Vuex.Store({

    state,

    mutations,

})

也就是这样定义,然后export出去,外面的就都可以用到了。

add(state) 注意一下里面是写的state....传state  然后再巴拉巴拉 qaq

嗯qaq  外面调用数据就是$store.state.count

或者 $store.commit('add') 这个是mutations里面的值 qvq   

外面可以import 然后export里也写,啊不过我记得可以直接注入的qvq (是的 上面有的)

视频来源于 【技术胖】 的vue教程哦qvq https://jspang.com/posts/2017/05/03/vuex.html

qvq  那这还行8

啊。测试了一下 的确可以直接在根组件里面用 全部注入子组件不用再重新引用了qvq,,直接import,el:‘#app’,store 就可以了,只不过要记得把之前用过的痕迹清空……

4.2节课的内容 

<h3>{{$store.state.count}}-{{count}}</h3> 

主要是想把左边这一长串  想用右边的短短的来显示。有三种方法:

1 computed 计算属性  这样可以直接用{{count}}  效果相同qvq

不能直接在data 因为没法响应式  你懂8  

    computed:{

        count(){

            return this.$store.state.count;

        }

    }

也可以mapstate

    computed:mapState({

        count:state=>state.count  【后面不要加分号

    }),

这里要import {mapstate} from ’vuex‘;

还可以最简单

computed:mapState(['count']),

也可以es5的语法:

     computed:mapState({

        count:function(state){

            return state.count;

        }

    }),

访问状态对象qvqqqq。。。。。访问状态对象

4.3视频  讲了 mapMutation

还有参数的引用,在store.js里面写   

    add(state,n){

        state.count+=n;

    },

引用的时候$store.commit('add',10)

记一下哦qvqqq,前面是方法名,后面是传的值,虽然长得有点诡异对吧qvq

mapMutations  其实也mapstate一样,先import from vuex

也在methods一样用

 methods:mapMutations(['add','reduce'
]),
 
用的时候 
<button @click="reduce">-</button>

哦qvq 它是methods,,对面是computed(对应数据)

可以的,完全没有压力好吧,如果有参数的话直接

@click=’add(10)‘ 完全ok的qvq

第4节:getters计算过滤操作

getters从表面是获得的意思,可以把他看作在获取数据之前进行的一种再编辑,相当于对数据的一个过滤和加工。你可以把它看作store.js的计算属性。

getters 就相当于  store里面的computed 计算属性

const getters = {

    count: function(state){

        return state.count+=10000;

    }

}

然后 这个写的是const  那么记得 给export 的default 里面里写一下写出去qvq、

这个。。。。  三个

点 是ES6 扩展运算符  它将一个数据,变为参数序列。

     computed:{

        ...mapState(['count']),

        ...mapGetters(['count']),

    },

可以直接这么写~   可以的呀  上面的是数据搞到了state 下面是getters   也就是默认我们进行的每次都加的操作呗qwq  这俩是不同 的 但是。。。的方式 es6直接简写了  还是很爽的qvq

第五节: actions 异步修改状态

actions和mutations差不多,但是它是异步改变状态的qvq。

同步异步去视频里看。。

 

actions是可以调用Mutations里的方法的~

我们写了:

    const actions ={

    addAction(context){  【这里面有个store  这个是上下文对象 相当于所有的都包括了吧qvqqq】

【对啊不是总是 $store 。 commit嘛qvq】 调用的方法是一样的。。。

        context.commit('add',19);

    },

    reduceAction({commit}){

        commit('reduce')

    },

}

而且 这里也可以直接传了一个包装好了的commit。

mutation是同步,一起去吃饭了,actions是异步,你先去吃我断后qvq。

1 store。js里写了export

2 写了个button 直接这样用 addAction 参数也没写(因为写在action里了)

3 <script >还是要准备 

4 computed 里面是mapstate 和mapgetters

那么 methods里就是两个函数一样的...   mapmutations  map actions

扩展三点符  给他扩展一下 其实差不多了qvq

[关键]-------------

怎么让他显示出来呢 我们异步一下呗qvq 就

    addAction(context){

        context.commit('add',1);

        setTimeout(()=>{

            context.commit('reduce')

        },500);

        console.log('我比那个人先执行了');

    },

qvq反正就是可以异步,我看出来了,时间剪短之后直接数值自己嗖嗖嗖变了qvq。。

可以可以。总之actions是支持异步的,可以用这个长相奇怪的settimeout ,大家都没啥意见。。

第六节。module

随着项目的复杂性增加,我们共享的状态越来越多,这时候我们就需要把我们状态的各种操作进行一个分组,分组后再进行按组编写。那今天我们就学习一下module:状态管理器的模块组操作。

还是这样看视频最好懂啊。。。

axois  我官方推荐的异步请求qvq

这个模块租,有的时候 其实没那么复杂就没必要先用

const moduleA={

    state,mutations,getters,actions

}

export default new Vuex.Store({

   modules:{a:moduleA}

})

或者 modules:{a: moduleA , b: moduleB}

这样可能每个人写的不一样会好管理一点吧...

但是qvq, 它不是那么直观,也可能会有一些坑在。

总之qvq先这样吧~

实际项目里啊  登录状态什么的 都需要vuex 但是不要过度依赖它qvq  传参的话还是去传参 除非你好几个地方都要用到 才去用一下那个vue

 

最后整体打包一下:

store。js代码

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)const state={count: 4
}
const mutations={add(state,n){state.count+=n;},reduce(state){state.count--;},
}const getters = {count: function(state){return state.count+=10000;}
}
const actions ={addAction(context){context.commit('add',1);setTimeout(()=>{context.commit('reduce')},500);console.log('我比那个人先执行了');},reduceAction({commit}){commit('reduce')},
}const moduleA={state,mutations,getters,actions
}
export default new Vuex.Store({modules:{a:moduleA}
})

count。vue代码

<template>
<div><h2>{{msg}}</h2><hr><h3>{{$store.state.a.count}}-{{count}}</h3><p><button @click="add(10)">+</button><button @click="reduce">-</button></p><p><button @click="addAction">+</button><button @click="reduceAction">-</button></p>
</div></template>
<script>
import {mapState,mapMutations, mapGetters, mapActions} from 'vuex';
export default {data(){return{msg:'Hello Vuex',}},computed:{...mapState(['count']),...mapGetters(['count']),},methods:{...mapMutations(['add','reduce']),...mapActions(['addAction','reduceAction'])},
}
</script>

app。vue代码(这里面倒是没什么...  就是这样引入了一下 我这个是全局引入qvq) 

<script>

import store from '@/vuex/store.js'

export default {

  name: 'App',

    el: '#app',

    store,

}

</script>

还有路由

{

      path: '/count',

      name: 'Count',

      component: Count

    },

qvq.....  有什么是可以期待并且很美好的事情呢qvq

这篇关于【vuex】 自己乱七八糟看教程...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688850

相关文章

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用