返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vuex入门教程,图文+实例解析
  • 450
分享到

vuex入门教程,图文+实例解析

2024-04-02 19:04:59 450人浏览 八月长安
摘要

目录我理解的概念核心概念秒懂不说废话直接在实例里面一一解释安装创建再来看看store的实例化挂载store直接在实例里面看怎么快速使用store吧简单解释一下直接看效果吧我理解的概念

我理解的概念

Vuex是为vue提供了全局的状态仓库(store),就像一个状态机,避免了父子、兄弟组件之前复杂的传参。他维持了全局共用的数据的一致性。

核心概念秒懂

1,state 共用的数据

2,getters 处理state后得到想要的数据

3,mutations 唯一可以修改state的函数

4,actions 只能显式的调用mutations,可以异步、请求数据

5,moudles 把1、2、3、4包装起来的当成一个模块,可以有多个也可以没有

不说废话直接在实例里面一一解释

项目结构:

在这里插入图片描述

安装

cnpm i vuex -S 

创建

创建如图的store

以下代码都是moduleA代码,

state.js

const state = {
  userInfo: {
    userName: '秋刀鱼笛滋味',
    age: 28,
    job: '前端工程师'
  },
  firend: [],
  girlfirend: [
    {
      name: 'LuoSi',
      age: 20,
      nationality: '韩国'
    },
    {
      name: 'AnNi',
      age: 22,
      nationality: '俄罗斯'
    }
  ]
}
export default state;

state没啥好解释的就一个对象,放你要用的状态码

getters.js

const getters = {
  userJob: (state) => {
    return `${state.userInfo.job}`
  },
  girlfirendInfo: (state, getters) => {
    const girlfirend = state.girlfirend
    let info = girlfirend.map((item, index) => {
      return `${index + 1}号女友的名字是${item.name},年龄${item.age},来自${item.nationality}`
    }).join(',')
    return `一共有${girlfirend.length}个女友,${info},可怕的是他只是一名${getters.userJob}。`
  }
}
export default getters;

getters接受两个参数,第一个是state,第二个是getters里面其他的函数

mutation.js

import axiOS from 'axios';
const mutations = {
  ageAdd (state, payload) {
    payload = payload || 1
    state.userInfo.age += payload
  },
  addGirlFirend (state, payload) {
    state.girlfirend.push({ name: payload.name, age: payload.age, nationality: payload.nationality })
  },
  getFirend (state, payload) {
    state.firend = payload
  },
  mutfired (state) { //vuex严禁在mutations里面进行异步操作,严格模式报错,难于调试
    axios.get('/myServer').then(res => {
      if (res.status === 200) {
        state.firend = res.data.data.list
      }
    })
  }
}
export default mutations;

mutations接受两个参数:state payload(调用时携带的参数),他是唯一可以修改state的地方,注意不可异步、不可调接口,严格模式会报错

如图:

在这里插入图片描述

actions.js

import axios from 'axios';
const actions = {
  addGirlFirend ({ commit, state, getters }, payload) {
    commit('addGirlFirend', payload);
  },
  getFirends (ctx) { //ctx是store下当前module对象
    axios.get('/myServer').then(res => {
      if (res.status === 200) {
        ctx.commit('getFirend', res.data.data.list)
        //直接在actions里面也可以修改state,但是不建议,创建store时用严格模式,会报错,不符合vuex单向数据流的规范(只能在mutions里面修改state)
        // ctx.state.firend = res.data.data.list
      }
    })
  }
}
export default actions;

actions接受一个当前module的上下文对象(常用有commit),用来commit 提交mutations,主要用来请求后端数据,可以异步

index.js

import state from './state';
import getters from './getters';
import mutations from './mutations.js';
import actions from './actions';
const moduleA = {
  state,
  getters,
  mutations,
  actions
}
export default moduleA;

把各个组件集合起来暴露出模块

再来看看store的实例化

store/index.js

import Vuex from 'vuex'
import Vue from 'vue'
import moduleA from './moduleA';
import moduleB from './moduleB';
Vue.use(Vuex)
let store = new Vuex.Store({
  //在严格模式下,无论何时发生了状态变更且不是由 mutation 函数引起的,将会抛出错误。这能保证所有的状态变更都能被调试工具跟踪到。
  //*严格模式会深度监测状态树来检测不合规的状态变更——请确保在发布环境下关闭严格模式,以避免性能损失。
  strict: process.env.node_ENV !== 'production',//自动在生产环境下关闭严格模式
  modules: {
    moduleA,
    moduleB
  }
})
export default store

注意:一定要用Vue.use一下vuex,最好使用严格模式!

当然store里面还可以用命名空间和插件,一般项目用不上

挂载store

在项目主文件

main.js 实例化vue时,挂载

new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

直接在实例里面看怎么快速使用store吧

helloWorld.vue

<template>
  <div>
    <Card style="width:550px">
      <div slot="title">
        <Icon type="ios-film-outline"></Icon>
        个人信息
      </div>
      <div>
        <p>姓名: {{userInfo.userName}}</p>
        <p>年龄: {{userInfo.age}}</p>
        {{girlfirendInfo}}
      </div>
    </Card>
    <hr style="margin:20px 0" />
    <Button type="success" @click="ageAdd()">增加了一岁</Button>
    <hr style="margin:20px 0" />
    <Button type="success" @click="addAge">增加了两岁(commit)</Button>
    <hr style="margin:20px 0" />
    <Card style="width:550px">
      <div slot="title">
        <Icon type="ios-film-outline"></Icon>
        女友信息:
      </div>
      <div>
        名字:
        <Input v-model="girlInfo.name"></Input>
        年龄:</br>
        <Input-number :max="100" :min="1" v-model="girlInfo.age"></Input-number></br>
        国籍:
        <Input v-model="girlInfo.nationality"></Input>
      </div>
      <Button type="success" @click="addGirlFirend(girlInfo)">增加</Button>
      <Button type="success" @click="addGirlFirend1">增加(dispatch)</Button>
    </Card>
    <hr style="margin:20px 0" />
    <Card style="width:550px">
      <div slot="title">
        <Icon type="ios-film-outline"></Icon>
        朋友信息:
      </div>
      <div>
        <p v-for="item in firend" :key="item.userName">{{item.userName}}</p>
      </div>
      <Button type="info" @click="getFirends">获取朋友</Button>
    </Card>
  </div>
</template>
<script>
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'
export default {
  data () {
    return {
      girlInfo: {
        name: '',
        age: 18,
        nationality: ''
      }
    }
  },
  computed: {
    ...mapGetters(['girlfirendInfo']),
    ...mapState({
      userInfo: state => state.moduleA.userInfo, //使用vuex的modules后一定要指明模块
      firend: state => state.moduleA.firend
    })
  },
  methods: {
    ...mapActions(['addGirlFirend', 'getFirends']), //this.$store.dispatch('addGirlFirend',payload)
    ...mapMutations(['ageAdd']), //this.$store.commit('ageAdd',payload)
    // 上面两个辅助函数方法的实质跟下面是一样的,推荐 使用辅助函数
    addAge () {
      this.$store.commit('ageAdd', 2)
    },
    addGirlFirend1 () {
      this.$store.dispatch('addGirlFirend', this.girlInfo)
    }
  }
}

先看一下初始UI吧

在这里插入图片描述

简单解释一下

主要的4个模块,有对应的四个辅助函数,用处是把状态 和 操作映射到当前页面

  • mapState mapGetters,是状态数据,放在计算属性;
  • mapMutationsmapActions 是操作函数, 显然放在方法里面;

注意带的注释;

直接看效果吧

调用mutations

在这里插入图片描述

调用actions

在这里插入图片描述

actions调接口

在这里插入图片描述

在这里插入图片描述

vuex的问题,解决方法点击vuex刷新state就没了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: vuex入门教程,图文+实例解析

本文链接: https://lsjlt.com/news/144428.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vuex入门教程,图文+实例解析
    目录我理解的概念核心概念秒懂不说废话直接在实例里面一一解释安装创建再来看看store的实例化挂载store直接在实例里面看怎么快速使用store吧简单解释一下直接看效果吧我理解的概念...
    99+
    2024-04-02
  • ReactJS入门实例教程详解
    目录一、ReactJS简介二、对ReactJS的认识及ReactJS的优点1、ReactJS的背景和原理2、组件化三、下载ReactJS,编写Hello,world四、Jsx语法五、...
    99+
    2024-04-02
  • 如何使用Vuex的入门教程
    目录前言一、基本概念初识vuex二、项目场景三、如何使用1、安装2、State初始值3、Getters修饰值4、Mutations修改值5、Actions异步修改值四、总结五、建议前...
    99+
    2024-04-02
  • Go语言快速入门图文教程
    目录推荐阅读:一、什么是 Go 语言?二、Go 语言特性三、Go 语言有多火 ?四、下载 Go 安装包五、安装 Go 语言环境Windows 安装 GoLinux 安装...
    99+
    2022-06-07
    GO go语言 教程
  • Web Components入门教程示例详解
    目录Web Components不兼容IE困境Web Components核心技术自定义元素HTML模板(template、slot)shadow root(影子Dom)Web Co...
    99+
    2023-05-18
    Web Components入门教程 Web Components
  • Python入门教程(三)Python语法解析
    目录执行 Python 语法Python 缩进Python 变量注释执行 Python 语法 正如我们在上一节中学习到的,可以直接在命令行中编写执行 Python 的语法: >...
    99+
    2023-05-14
    Python入门 Python语法解析
  • Blender Python编程入门实例分析
    Blender Python 编程支持的特性:编辑用户界面可以编辑的任何数据(场景,网格,粒子等)。修改用户首选项、键映射和主题。使用自己的设置运行工具。创建用户界面元素,如菜单、标题和面板。创建新的工具。创建交互式工具。创建与 Blend...
    99+
    2023-05-14
    Python blender
  • HTML入门实例分析
    这篇文章主要介绍“HTML入门实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTML入门实例分析”文章能帮助大家解决问题。 HTML是英文Hyper Te...
    99+
    2024-04-02
  • SpringMVC入门实例分析
    今天小编给大家分享一下SpringMVC入门实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • Elasticsearch入门实例分析
    这篇文章主要介绍“Elasticsearch入门实例分析”,在日常操作中,相信很多人在Elasticsearch入门实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Elasticsearch入门实例分析...
    99+
    2023-06-05
  • python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
    前言 python爬虫系列文章的第3篇介绍了网络请求库神器 Requests ,请求把数据返回来之后就要提取目标数据,不同的网站返回的内容通常有多种不同的格式,一种是 json 格式,这类数据对开发者来说最...
    99+
    2022-06-04
    爬虫 入门教程 文本
  • SQL 入门教程:创建视图
    目录一、利用视图简化复杂的联结二、用视图重新格式化检索出的数据三、用视图过滤不想要的数据四、使用视图与计算字段请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 理解了什么是 视图 以及管理它们的规则和约束后,我们来创建视图...
    99+
    2022-01-24
    SQL 入门教程:创建视图
  • Python画图学习入门教程
    本文实例讲述了Python画图的基本方法。分享给大家供大家参考,具体如下: Python:使用matplotlib绘制图表 python绘制图表的方法,有个强大的类库matplotlib,可以制作出高质量的...
    99+
    2022-06-04
    画图 入门教程 Python
  • Python爬虫入门教程: 27270图
    今天继续爬取一个网站,http://www.27270.com/ent/meinvtupian/ 这个网站具备反爬,so我们下载的代码有些地方处理的也不是很到位,大家重点学习思路,有啥建议可以在评论的地方跟我说说。   为了以后的网...
    99+
    2023-01-31
    爬虫 入门教程 Python
  • SpringBoot Security从入门到实战示例教程
    目录前言入门测试接口增加依赖自定义配置配置密码加密方式配置AuthenticationManagerBuilder 认证用户、角色权限配置HttpSecurity Url访问权限自定...
    99+
    2024-04-02
  • Systemd 入门实战教程
    我介绍了 Systemd 的主要命令,今天介绍如何使用它完成一些基本的任务。 一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd...
    99+
    2022-12-12
    Systemd 入门 Systemd 入门教程
  • Redis入门教程详解
    目录Redis一、Redis基本数据结构1. 字符串 (String)2. 散列(hash)3. 列表(list)4. 集合(Set)5. 有序集合(sorted set)二、Red...
    99+
    2024-04-02
  • SpringBoot入门教程详解
    目录一、SpringBoot简介二、SpringBoot入门案例1、创建项目2、编写 Controller 类3、启动项目4、使用 Postman 测试三、SpringBoot VS...
    99+
    2024-04-02
  • Leaflet基础入门教程示例
    目录什么是Webgis?什么是Leaflet?在Vue中安装Leaflet,与其他依赖在App.vue中使用初始化地图chinaProvider地图瓦片addControls使用工具...
    99+
    2023-01-04
    Leaflet 基础 Leaflet 入门教程
  • Android中的ViewPager视图滑动切换类的入门实例教程
    ViewPager引入示例 首先让大家有个全局的认识,直接上个项目,看看仅仅通过这几行代码,竟然就能完成如此强悍的功能。 效果图: 实现了三个view间的相互滑动。 第一个VI...
    99+
    2022-06-06
    viewpager 教程 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作