最近在开发一套系统,前端使用VUE开发,由于本人是后端开发,前端也会一点,但是VUE接触不多,在VUE项目开发遇到的一些坑记录一下,不是专业前端写好的不好,大家不要唝。。。

在VUE项目中经常会用到mapState和mapActions,mapState主要用于同步全局的变量或者对象,mapActions主要是用于同步定义的方法,一般两者是结合使用,mapState同步项目中定义的全局的变量或者对象,mapActions是用于变量或者对象为空时,调用方法定义的全局方法获取。

mapActions和mapState需要引用vuex,所以在页面里面需要 使用下面的代码引入

import { mapActions, mapState } from 'vuex'

由于全局数据需要保存到本地缓存中,所以需要在main.js中引用store,并且定义全局的对象或者变量代码如下

import store from './store'
const state = {
userName,
token,
refreshToken,
tokenExpire,
menus: []
} Vue.use(Vuex)
export default new Vuex.Store({
state,
actions, // 自定义的一些方法
mutations // 自定义的修改状态的方法
})

如果需要在某个页面获取menus的对象,就可以使用 mapState,如果menus对象已有值就获取直接同步过来


import { mapActions, mapState } from 'vuex'
computed: {
    ...mapState([
      'menus'
    ])
// 如果要使用menus对象,直接使用this.menus即可

如果menus没有值就需要使用mapActions,将方法同步过来,在页面里面判断menus是否为空,如果为空,调用action获取并且保存,其他页面就可以直接获取了

import { mapActions, mapState } from 'vuex'
methods: {
...mapActions([
'getMenus'
])
if (menus.length === 0)
  this.getMenus() // 调用方法获取,这里getMenus如果是从接口获取数据,需要使用异步,否则可能会有问题

在使用mapActions时,发现在grid里面使用不了使用actions同步过来的对象,会报错,于是我在grid里面重新定义了变量,使用了watch来监听对象的变化,如果有变化就给定义的变量赋值,这样就解决了这个问题。

 watch: {
// 监听器的作用就是用来监听数据是否发生了变化,变化后可以进行一些其他操作
// 只要没有发生变化,就没有办法进行其他的操作
menus: function (newData, oldData) {
this.PageMenus = newData
console.log(newData, oldData)
}
},
mounted() {
if (this.menus.length === 0) {
this.getMenus()
} else {
this.PageMenus = this.menus // PageMenus是页面定义的变量
}
}

根据自己的理解写的,记录一下,如果有什么不正确的地方,欢迎更正。

关于VUE中的mapState和mapActions的使用的更多相关文章

  1. vuex之 mapState, mapGetters, mapActions, mapMutations 的使用

    一.介绍 vuex里面的四大金刚:State, Mutations,Actions,Getters (上次记得关于vuex笔记 http://www.cnblogs.com/adouwt/p/8283 ...

  2. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  3. vue中遇到的坑

    如何解决在vue中替换图片.一个使用base64,而我们使用zepto之后,src找不到资源,因为已经打包了,难道强行写base64. 1. 引入文件时语法很重要! import "Foot ...

  4. vuex 中关于 mapState 的作用

    辅助函数 Vuex 除了提供我们 Store 对象外,还对外提供了一系列的辅助函数,方便我们在代码中使用 Vuex,提供了操作 store 的各种属性的一系列语法糖,下面我们来一起看一下: mapSt ...

  5. vue中父组件如何监听子组件值的变化

    vue中我们会遇到很多父子组件通信的需求, 下面简单列一下,父子组件通信的几种情况 1:父组件向子组件传值:使用prop向子组件传值: 2:子组件实时监听父组件传来的值的变化:使用watch去监听父组 ...

  6. vue中如何不通过路由直接获取url中的参数

    前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接 ...

  7. vue中的重要特性

    一.vue中的自定义组件 html的代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  8. Vue中comoputed中的数据绑定

    Vue中的数据实现响应式绑定是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集依赖项,当数据发生变化时在set中通过调用dep. ...

  9. vue中使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt ...

  10. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

随机推荐

  1. 记一次burp抓不到包的排查与处理

    ​ 一次遇到了burp上奇怪的bug.访问某个页面显示 No response received from remote server , ​ 但是使用 yakit 进行抓包之后发现网站可以正常抓包 ...

  2. Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF]

    在Spring Boot项目中,使用org.springframework.mail.javamail.JavaMailSender发送邮件抛异常,异常信息: Mail server connecti ...

  3. 记录第一次公司内部分享:如何基于大模型搭建企业+AI业务

    Hello, 大家好,我是程序员海军, 全栈开发 |AI爱好者 | 独立开发. 记录第一次在公司内部分享AI+业务 落地实践. 如今,AI时代带来的无限可能性,很多业务都值得从做一遍. 最近,老大参加 ...

  4. VSCode安装配置C++环境教程

    前言 IDE--集成开发环境,用于提供程序开发环境,集成了代码编写.分析.编译和调试等一体化的的套件.如C++的Visual Studio.Java的IDEA和Python的PyCharm等.IDE部 ...

  5. Springboot笔记<9>使用Javaweb原生组件

    使用Javaweb原生组件 Javaweb的三大组件:servlet,Filter,Listener,Servlet 3.0 提供了以下 3 个注解: @WebServlet:用于声明一个 Servl ...

  6. Coze/Dify/FastGPT/N8N :该如何选择Agent平台?

    你好,小钗在医疗AI.教育AI.管理AI有丰富的经验 关注公众号,回复1,与我交个朋友吧 书接上文: AI创业如何选择Agent平台,Coze.Dify.腾讯元器?可能都不是 Coze案例,个人知识库 ...

  7. springboot的代理模式示例----面向切面编程

    1.定义切面类  2.编写切面类 import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.databind.ObjectMappe ...

  8. 用网页计数器来说明application和session

    jsp的代码: 1 <body> 2 <h1>网页计数器</h1> 3 <% 4 //第一次访问数据为空 5 Object obj=application.g ...

  9. 获取Harbor镜像仓库指定Project的容量使用并进行企业微信告警

    简单说明 在镜像仓库的维护中,有时我们需要根据镜像仓库的使用情况进行及时的告警和扩容,避免镜像仓库容量满载时再进行扩容,这样会造成业务的阻塞. 这里我们使用Python简单写一个实现获取镜像仓库指定项 ...

  10. Opencv学习:使用Opencv对图象进行抠图和滤镜处理,实现“你的名字”动漫图片效果

    最近接到了一个坑爹题目,是这么要求的: 仿照 <你的名字>,对天坛图像.src.jpg进行处理.要求 (一)背景(天空)分割,替换后再融合 在自然界的图片中,很难出现动漫中大多大多的云彩. ...