vuex

核心: store(仓库)

state: 状态
getters: 对 state 的派生,可以理解为 store 的计算属性

  • 存放针对store的state数据或者其他getter数据做的计算属性
    1. state 自动接收到的当前store的state对象
    1. getters 自动接收到的当前state的getters对象
    1. 必须有返回值
    1. 它也不能直接修改
      mutations: 修改 state 的唯一操作就是提交 mutation。
  • 唯一能修改仓库state数据的地方
    1. state 是自动接收到的当前的state对象
    1. payload 是提交这个 mutation 时,传递过来的参数
      actions: 类似于 mutations , 用来处理异步。
  • 存放异步的动作,它也不能直接去修改state的。而是在里面调用了mutation
    1. context 是自动接收到的当前的 store 实例对象(上下文)它里面有 state、getters、commit、dispatch 等。
    1. payload 是派发这个 action 时,传递过来的参数
      modules: 对仓库 分割成 模块

mapState(): sate的辅助函数
mapGetters(): getters的辅助函数
mapMutations(): mutations的辅助函数
mapActions(): actions的辅助函数

一、使用 state 数据

一定是通过computed去使用

  1. 最简单的方式
computed: {
  card () {
    return this.$store.state.card
  }
}
  1. 推荐的方式, mapState() 辅助函数的方式
import { mapState } from 'vuex'
export default {
  computed: {
    ...mapState(['card'])
  }
}

二、使用 getters 数据(相当于计算属性,依赖变化,重新计算)

一定是通过computed去使用

  1. 最简单的方式
computed: {
  total () {
    return this.$store.getters.total
  }
}
  1. 使用 mapGetters 辅助函数
import { mapGetters } from 'vuex'
export default {
  computed: {
    ...mapGetters(['total'])
  }
}

三、使用 mutations 方法(改变数据的方法(突变))

首先针对某个state数据提供一个mutation(突变)
官方不建议我们直接修改store的数据,而是提交一个commit请求,mutations去变

  1. 最简单的方式
methods: {
  handleAdd () {
    this.$store.commit('xxmutation', 'payload参数')
  }
}
  1. mapMutations 辅助函数
import { mapMutations } from 'vuex'
export default {
  methods: {
    ...mapMutations(['DEL_CARD'])
  }
}

四、使用 actions(用于写异步代码)

首先仓库中的先定义action

  1. 最简单的方式
methods: {
  handleAdd () {
    this.$store.dispatch('xxAction', 'payload参数')
  }
}
  1. 使用 mapActions()
import { mapActions } from 'vuex'
export default {
  methods: {
    ...mapActions(['ADD_CARD_ASYNC'])
  }
}

五、taopp实例代码

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const city = window.localStorage.getItem('city')
let cinema = decodeURI(window.localStorage.getItem('cinema'))
const userInfo = window.localStorage.getItem('userInfo')
const token = window.localStorage.getItem('token')
export default new Vuex.Store({
  state: {
    city: city ? JSON.parse(city) : null,
    // 用户信息存储
    userInfo: userInfo ? JSON.parse(userInfo) : null,
    // token
    token: token || null,
    cinema: cinema ? JSON.parse(cinema) : null
  },
  mutations: {
    // xxh影院详情方法
    RESET (state, item) {
      state.cinema = item
      window.localStorage.setItem('cinema', encodeURI(JSON.stringify(item)))
    },
    // zk同步localStorage城市数据
    SET_CITY (state, city) {
      state.city = city
      window.localStorage.setItem('city', JSON.stringify(city))
    },
    SET_USER_INFO_AND_TOKEN (state, payload) {
      state.userInfo = payload.userInfo
      state.token = payload.token
      window.localStorage.setItem('userInfo', JSON.stringify(payload.userInfo))
      window.localStorage.setItem('token', payload.token)
    }
  },
  actions: {
  },
  modules: {
  }
})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 3,032评论 0 7
  • Vuex是什么? Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件...
    萧玄辞阅读 3,228评论 0 6
  • vuex 场景重现:一个用户在注册页面注册了手机号码,跳转到登录页面也想拿到这个手机号码,你可以通过vue的组件化...
    sunny519111阅读 8,155评论 4 111
  • ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...
    芸豆_6a86阅读 779评论 0 3
  • 由于Vuex的官方文档在各个模块之间缺乏一些过渡,另外新概念很多,使得初读时总有些云里雾里的感觉。于是本文在官方文...
    一郭鲜阅读 388评论 0 1

友情链接更多精彩内容