VUE--VUEX

这篇具有很好参考价值的文章主要介绍了VUE--VUEX。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是Vuex

Vuex就是一个vue的状态(数据)管理工具,是vue项目实现大范围数据共享的技术方案。能够方便、高效的实现组件之间的数据共享。

Vuex的好处

        (1)数据的存储一步到位,不需要层层传递

        (2)数据的流动十分清晰

        (3)存储在Vuex中的数据都是响应式的(数据更新后,使用数据的组件也会自动更新) 

适合存储到Vuex中的数据----需要共享的数据

Vuex的使用场景:

        频繁、大范围的数据共享。

        (1)某个状态在很多个组件中使用

        (2)多个组件共同维护一份数据 

VUE--VUEX,VUE基础,vue.js,前端,javascript 

二、Vuex的安装及配置

        1、执行以下命令,安装Vuex 

        注:我的项目是vue2的项目,所以安装的是3.6.2版本的vuex

npm i vuex@3.6.2

         2、新建src/store/index.js,专门存放vuex

        在src目录下新建store文件夹,并在store文件夹下新建index.js文件VUE--VUEX,VUE基础,vue.js,前端,javascript

        3、创建仓库 

        index.js 内容如下:

// 导入 vue
import Vue from 'vue'
// 导入 vuex
import Vuex from 'vuex'
// vuex也是vue的插件, 需要use一下, 进行插件的安装初始化
Vue.use(Vuex)

// 创建仓库实例对象 store
const store = new Vuex.Store()

// 导出仓库对象
export default store

        4、挂载到main.js中

         在main.js中导入,并挂载到Vue示例上

        main.js中的内容如下:

import Vue from 'vue'
import App from './App.vue'
import store from './store'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  store
}).$mount('#app')

        4、测试仓库是否创建成功

        在App.vue中,打印store对象,控制台查看结果

created(){
  console.log(this.$store)
}

        若控制台输出如下内容,则代表创建仓库成功 

VUE--VUEX,VUE基础,vue.js,前端,javascript

三、state的基础使用 

 state作用:state属性的值是一个对象,用于存储全局共享的数据

        1、存储数据

        在store/index.js中添加如下内容: 

const store = new Vuex.Store({
  //这里配置vuex
  // state 用于存储数据(存储状态)(Vuex状态管理)
  state: {
    age: 18,
    name: 'Tom',
    list: [
      { id: 1, name: 'John', isDone: true },
      { id: 2, name: 'Juliy', isDone: true },
      { id: 2, name: 'Lily', isDone: true },
    ],
  },
})

        2、vue页面中使用

  <div>
    组件1
    <p>{{ $store.state.name + '--' + $store.state.age }}</p>
  </div>

       3、js中使用

import store from "@/store"

console.log(store.state.age)

       4、 结果

 VUE--VUEX,VUE基础,vue.js,前端,javascript

        5、严格模式

开启严格模式,防止在组件中直接修改state数据,开启后,若直接修改state数据,会报错 

        开启方法:

const store = new Vuex.Store({
  //这里配置vuex
  // 开启严格模式,防止在组件中直接修改state数据
  strict: true,
})

四、mutations的基础使用 

mutations作用: 修改state数据,且是修改state数据的唯一途径

        1、定义方法 

        在store/index.js中添加如下内容:

const store = new Vuex.Store({
  mutations: {
    updateAge (state, newAge) {
      state.age = newAge
    },
  },
})

        2、vue页面中使用 

<button @click="$store.commit('updateAge', 20)">更新年龄</button>

        3、结果

        页面点击更新年龄按钮,页面中年龄会发生变化

 VUE--VUEX,VUE基础,vue.js,前端,javascriptVUE--VUEX,VUE基础,vue.js,前端,javascript

五、actions的基础使用

mutations是同步更新数据 (便于监测数据的变化, 更新视图等, 方便于调试工具查看变化),

actions则负责进行异步操作

        1、定义方法 

        在store/index.js中添加如下内容:

const store = new Vuex.Store({
  // mutations里面放同步方法
  mutations: {
    updateAge (state, newAge) {
      state.age = newAge
    },
  },
  // actions里面放异步方法
  actions: {
    updateAgeAfter3s (store, newAge) {
      setTimeout(() => {
        // 只有mutations可以修改数据,所以这里调用mutations的方法
        store.commit('updateAge', newAge)
      }, 3000)
    },
  },
})

        2、vue页面中的使用 

<button @click="$store.dispatch('updateAgeAfter3s', 30)">3s后更新年龄</button>

         3、结果

        页面点击3s后更新年龄按钮,页面中年龄会在3s后发生变化

VUE--VUEX,VUE基础,vue.js,前端,javascriptVUE--VUEX,VUE基础,vue.js,前端,javascript

六、getters的基础使用

getters作用:getters是Vuex中的计算属性(和组件中的计算属性意义一样,但不支持set修改) 

        1、定义方法

        在store/index.js中添加如下内容:

  // 为了方便获取state中的数据,vuex会给每个计算属性的方法,传递一个state参数
  getters: {
    ageComputed (state) {
      return state.age * 2
    },
  },

        2、vue页面中使用

<p>{{ $store.getters.ageComputed }}</p>

        3、结果

VUE--VUEX,VUE基础,vue.js,前端,javascript

七、借助辅助方法使用state和getters

mapState和mapGetters是辅助函数,帮助我们把store中的数据映射到组件的计算属性中, 它属于一种方便的用法。

        store/index.js中的内容不变,还是上方的内容,只有vue页面的使用需要修改。

        1、 导入mapState和mapGetters

import { mapState, mapGetters } from 'vuex'

        2、利用展开运算符映射到computed计算属性中 

  computed: {
    ...mapState(['age', 'name']),
    ...mapGetters(['ageComputed']),
  },

         注:若state中字段名与data中字段名重复,可采用以下方法引入

...mapState({ ages: 'age', uname: 'name' })

        3、vue页面中使用

<p>{{ ages + '---' + uname }}</p>
<p>{{ ageComputed }}</p>

         4、结果

VUE--VUEX,VUE基础,vue.js,前端,javascript

八、借助辅助方法使用mutations和actions

 mapMutations和mapActions,把位于mutations和actions中的方法提取了出来,我们可以将它导入到methods中方便使用。

        1、导入mapMutations和mapActions 

import { mapMutations, mapActions } from 'vuex'

        2、利用展开运算符映射到methods方法中 

  methods: {
    ...mapMutations(['updateAge']),
    ...mapActions(['updateAgeAfter3s']),
  },

         3、vue页面中使用

<button @click="updateAge(22)">更新年龄</button>
<br />
<button @click="updateAgeAfter3s(24)">3s后更新年龄</button>

         4、结果

VUE--VUEX,VUE基础,vue.js,前端,javascriptVUE--VUEX,VUE基础,vue.js,前端,javascript

九、vuex模块化---modules 

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

即,如果把所有的状态都放在state中,当项目变得越来越大的时候,Vuex会变得越来越难以维护。

由此,又有了Vuex的模块化。

VUE--VUEX,VUE基础,vue.js,前端,javascript 

        1、模块定义

        在store文件夹下,新建modules文件夹,在modules文件夹中新建user.js和todo.js文件,文件目录如下:

VUE--VUEX,VUE基础,vue.js,前端,javascript 

        user.js 的内容如下:

// 存储用户相关数据
export default {
  // 开启命名空间,必须的操作
  namespaced: true,
  // state 用于存储数据(存储状态)(Vuex状态管理)
  state: {
    age: 18,
    name: 'Tom',
  },
  // mutations是修改state数据的唯一途径
  // 所有方法不支持一步更新,只支持同步方法
  mutations: {
    updateAge (state, newAge) {
      state.age = newAge
    },
  },
  // actions里面放异步方法
  actions: {
    updateAgeAfter3s (store, newAge) {
      setTimeout(() => {
        // 只有mutations可以修改数据,所以这里调用mutations的方法
        store.commit('updateAge', newAge)
      }, 3000)
    },
  },
  // getters是Vuex中的计算属性(和组件中的计算属性意义一样,但不支持set修改)
  // 为了方便获取state中的数据,vuex会给每个计算属性的方法,传递一个state参数
  getters: {
    ageComputed (state) {
      return state.age * 2
    },
  },
}

        todo.js的内容如下:

// 存储列表相关数据
export default {
  // 开启命名空间,必须的操作
  namespaced: true,
  // state 用于存储数据(存储状态)(Vuex状态管理)
  state: {
    list: [
      { id: 1, name: 'John', isDone: true },
      { id: 2, name: 'Juliy', isDone: true },
      { id: 3, name: 'Lily', isDone: true },
    ],
  },
}

        2、在index.js中导入并注册modules模块

         store/index.js 内容如下:

// 导入 vue
import Vue from 'vue'
// 导入 vuex
import Vuex from 'vuex'

// 导入小模块
import user from './modules/user'
import todo from './modules/todo'

// vuex也是vue的插件, 需要use一下, 进行插件的安装初始化
// 将vuex注册为插件
Vue.use(Vuex)

// 创建仓库 store
// 创建store实例对象
const store = new Vuex.Store({
  // 这里配置vuex
  // 开启严格模式,防止在组件中直接修改state数据
  strict: true,
  // modules模块注册
  modules: {
    user,
    todo,
  },
})

// 导出仓库/对象
export default store

        3、vue页面中直接使用

<template>
  <div>
    组件1
    <p>{{ $store.state.user.name + '--' + $store.state.user.age }}</p>
    <p>{{ $store.getters['user/ageComputed'] }}</p>
    <button @click="$store.commit('user/updateAge', 20)">更新年龄</button>
    <br />
    <button @click="$store.dispatch('user/updateAgeAfter3s', 30)">3s后更新年龄</button>
  </div>
</template>

<script>
export default {}
</script>

<style lang="less" scoped></style>

        4、利用辅助方法调用 

<template>
  <div>
    组件2
    <p>{{ age + '---' + name }}</p>
    <!-- <p>{{ ages + '---' + uname }}</p> -->
    <p>{{ ageComputed }}</p>
    <ul>
      <li v-for="item in list" :key="item.id">{{ item.name }}</li>
    </ul>
    <br />
    <button @click="updateAge(22)">更新年龄</button>
    <br />
    <button @click="updateAgeAfter3s(24)">3s后更新年龄</button>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'
export default {
  computed: {
    ...mapState('user', ['age', 'name']),
    ...mapState('todo', ['list']),
    // 若state中字段名与data中字段名重复,可采用以下方法引入
    // ...mapState({ ages: 'age', uname: 'name' }),
    ...mapGetters('user', ['ageComputed']),
  },
  methods: {
    ...mapMutations(['user/updateAge']),
    ...mapActions(['user/updateAgeAfter3s']),
  },
}
</script>

<style lang="less" scoped></style>

十、state、getters、mutations、actions的对比

VUE--VUEX,VUE基础,vue.js,前端,javascript文章来源地址https://www.toymoban.com/news/detail-824750.html

到了这里,关于VUE--VUEX的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月04日
    浏览(43)
  • 〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介

    说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费 , 如需要项目实战或者是体系化资源,文末名片加V! 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。 荣誉: 2022年度博客之星Top4、2023年度超

    2024年02月04日
    浏览(42)
  • 前端随笔:HTML/CSS/JavaScript和Vue

    最近因为工作需要,需要接触一些前端的东西。之前虽然大体上了解过 HTML 、 CSS 和 JavaScript ,也知道 HTML 定义了内容、 CSS 定义了样式、 JavaScript 定义了行为,但是却没有详细的学习过前端三件套的细节。而最近的工作中需要使用 Vue ,并且想到未来的工作中使用 Vue 能够更

    2024年02月16日
    浏览(33)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(47)
  • 【js&vue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript

    lifecycle.js 注解: this.$options.beforeMount.call(this);与 this.$options.beforeMount();有什么区别: call(this)  的作用是将当前对象( this )作为参数传递给  beforeMount  方法,使得在  beforeMount  方法内部可以通过  this  访问到当前对象的上下文 直接调用了  beforeMount  方法,没有指定上下

    2024年02月09日
    浏览(42)
  • 〖大前端 - 基础入门三大核心之JS篇㉔〗- JavaScript 的数组的常用方法 (一)

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月07日
    浏览(34)
  • 前端技术Html,Css,JavaScript,Vue3

    1.基本标签 2.文本格式化 3.链接 4.图片 5.无序列表 6.有序列表 7.表格 8.表单 1.选择器 2.文本和字体 3.链接 4.隐藏 5.定位position 6.浮动 7.对齐 8.图像 1.输出 2.函数 3.常用事件 4.DOM 5.改变Html 6.DOM 元素 (节点) 尾部创建新的 HTML 元素 (节点) - appendChild() 头部创建新的 HTML 元素 (节点)

    2024年02月13日
    浏览(43)
  • 前端(四)——vue.js、vue、vue2、vue3

    😊博主:小猫娃来啦 😊文章核心: vue.js、vue、vue2、vue3从全局到局部 Vue.js是一款流行的JavaScript框架 vue,vue2,vue3都是vue.js的不同版本。 Vue:Vue.js的第一个版本,也称为Vue 1.x。它于2014年首次发布,并获得了广泛的应用和认可。 Vue2:Vue.js的第二个版本,也称为Vue 2.x。它在Vu

    2024年02月12日
    浏览(47)
  • 【前端技术】Vue3 01:初识 Vue.js

    Vue 可以说是非常流行了,至少在国内是这样,他是个轻量级的 JavaScript 框架,非常适合构建大型和中小型的 Web 应用程序,如果想和前端打交道,应该绕不过这个框架吧。 目录 1 Vue.js 介绍 2  IDE 选择 2.1 vscode 2.2 WebStorm 2.3 Eclipse 3  创建 Vue 应用 3.1 本地脚手架创建 ① 安装

    2024年02月02日
    浏览(47)
  • 〖大前端 - 基础入门三大核心之JS篇⑰〗- JavaScript的流程控制语句「while循环语句」

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月04日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包