【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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo