vuex的 例子

最近在学习vuejs,一直有听说vuex,用来实现多组件共享的一种状态管理模式,但是网上都说,不要为了用vuex而用vuex,大概意思就是尽量少用vuex,一些小项目可以用bus来实现组件之间的传值问题。虽然说不用vuex,但至少要知道这是个什么东西吧?还要学会怎么用。趁现在有点时间,弥补自己的不足。一些概念性的东西,还是看官方文档吧。Vuex2.0。

我们先来看看官网的一张关于Vuex的图

Vuex规定,属于应用层级的状态只能通过Mutation中的方法来修改,而派发mutation中的事件只能通过action来进行。

我们可以从上图很直观的看到,数据流是单向的,从左到右,从组件出发,组件中调用action,在action这一层,我们可以和后台数据交互,然后在action中去派发mutation,mutation去触发状态的改变,状态改变触发视图的更新。

下面直接用例子来认识一下vuex。

一、搭建一个vue框架

二、安装Vuex

npm install vuex --save

三、主要修改的文件目录

四、Counter.vue文件

 

复制代码
<template>
  <div id="app">
    Count is {{$store.state.count}}//使用
    <button @click="increment">+5</button>
    <button @click="decrement">-3</button>
  </div>
</template>
<script>
  // 引入mapActions,很重要
  import { mapGetters, mapActions } from 'vuex'
  export default{
    computed: mapGetters([//与vuex中的getters关联

    ]),

    methods: mapActions([//与vuex中的actions关联
      'increment',
      'decrement'
    ])
  }
</script>
复制代码

五、创建一个vuex文件夹,文件夹里面创建一个store.js文件(关键)

复制代码
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
// 首先声明一个状态 state
const state = {
  count: 0
}

// 然后给 actions 注册事件处理函数,当这个函数被触发时,将状态提交到 mutaions中处理
const actions = {
  increment: ({ commit }) => commit('increment'), // 提交到mutations中处理
  decrement: ({ commit }) => commit('decrement')
}
// 更新状态
const mutations = {
  increment (state) {
    state.count = state.count + 5
  },
  decrement (state) {
    state.count = state.count - 3
  }
}
// 获取状态信息
const getters = {
}

// 下面这个相当关键了,所有模块,记住是所有,注册才能使用
export default new Vuex.Store({
  state,
  mutations,
  actions,
  getters
})
复制代码

六、要在main.js声明全局

 七、在index.js中对Counter.vue设置路由

八、实现的效果

以上就是一个很简单的一个计数的例子,对vuex有了一个小小的认识,但是对【state,mutations,actions,getters,modules】这几个状态的用法还不是很明确?后段时间,还是继续用例子来加深对他们的理解。

实例二

上面的例子,我是把【state,mutations,actions,getters,modules】这几个状态放在store.js这个文件内,现在就把这几个拆开为几个文件,加深理解。

一、目录结构

二、Counter.vue的配置,主要标红的地方实例一的区别

三、store的入口文件index.js的配置

 

复制代码
import Vue from 'vue'
import Vuex from 'vuex'
import * as getters from './getters'
import * as actions from './actions'
import * as mutations from './mutations'

Vue.use(Vuex)
// 首先声明一个状态 state
const state = {
  count: 0
}
// 下面这个相当关键了,所有模块,记住是所有,注册才能使用
const store = new Vuex.Store({
  state,
  getters,
  actions,
  mutations
})
export default store
复制代码

 

四、actions.js文件的配置

//actions 注册事件处理函数,当这个函数被触发时,将状态提交到 mutaions中处理
export const increment = ({ commit }) => commit('increment')
export const decrement = ({ commit }) => commit('decrement')

传参时的配置

五、mutations.js文件配置

复制代码
// 状态值的改变方法,操作状态值
// 提交mutations是更改Vuex状态的唯一方法 export const increment = state => { state.count = state.count + 5 } export const decrement = state => {
复制代码

传参时的配置

 

 六、getters.js的配置

export const count = state => state.count

七、main.js和路由index.js的配置

八、实现效果

好了。对vuex有了更深的一层理解。但是这还远远还不够。接下来就是在项目中用vuex实现登录,保存用户信息。

谢谢yuwenjing的分享:http://www.cnblogs.com/yuwenjing0727/p/7205577.html

### 回答1: 安装 Vuex 非常简单,只需要在你的 Vue 项目中执行以下命令即可: ``` npm install vuex --save ``` 安装完成后,在你的 Vue 项目中引入 Vuex: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) ``` 接下来,我们可以创建一个简单的例子来展示 Vuex 的用法。假设我们有一个计数器,我们可以使用 Vuex 来管理这个计数器的状态和变更。 我们先来定义一个初始状态: ```javascript const state = { count: 0 } ``` 然后我们定义一些操作(mutations)来更新状态: ```javascript const mutations = { increment(state) { state.count++ }, decrement(state) { state.count-- } } ``` 接下来,我们定义一些 getters 来获取状态: ```javascript const getters = { getCount: state => { return state.count } } ``` 最后,我们定义一个 store,将初始状态、操作和 getters 组合起来: ```javascript export default new Vuex.Store({ state, mutations, getters }) ``` 现在我们可以在组件中使用这个 store 了。假设我们有一个按钮,点击后可以增加计数器的值: ```html <template> <div> <p>Current count: {{ count }}</p> <button @click="incrementCount">Increment</button> <button @click="decrementCount">Decrement</button> </div> </template> <script> import { mapGetters, mapMutations } from 'vuex' export default { computed: { ...mapGetters([ 'getCount' ]) }, methods: { ...mapMutations([ 'increment', 'decrement' ]), incrementCount() { this.increment() }, decrementCount() { this.decrement() } } } </script> ``` 我们通过 `mapGetters` 来获取 `count` 的值,并通过 `mapMutations` 来调用 `increment` 和 `decrement` 操作。最后,在组件中使用这些方法即可实现增加和减少计数器的值。 这就是一个简单的 Vuex 例子。当然,在实际项目中,可能需要更复杂的状态管理和操作,但是基本的原理和用法都是相同的。 ### 回答2: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它利用全局状态管理的方式,帮助我们更好地管理应用的数据。 假设我们有一个简单的目标:在网页上显示一个计数器,点击按钮可以将计数器的值加水或放水。下面是一个使用 Vuex 实现该功能的例子。 首先,我们需要安装 Vuex。可以通过 npm 或者 yarn 进行安装。在项目的根目录下运行以下命令: ``` npm install vuex ``` 接下来,我们需要在应用程序的入口文件 main.js 中引入 Vuex。在 main.js 的开头添加以下代码: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) ``` 然后,我们创建一个 store 对象来存储应用的状态,并定义对应的 mutations 来修改状态。在 main.js 中添加以下代码: ```javascript const store = new Vuex.Store({ state: { counter: 0 // 初始化计数器的值为0 }, mutations: { increment(state) { state.counter++ }, decrement(state) { state.counter-- } } }) ``` 现在,我们已经准备好了 Vuex 的安装和基础配置。接下来,我们需要在组件中使用 Vuex 来实现加水和放水的逻辑。 在组件的 script 标签中导入 Vuex 并通过 computed 属性访问 Vuex 的状态和 mutations 。例如,我们可以把加水和放水的按钮绑定到两个不同的方法: ```javascript import { mapState, mapMutations } from 'vuex' export default { computed: { ...mapState(['counter']) // 使用 mapState 来映射状态 }, methods: { ...mapMutations(['increment', 'decrement']) // 使用 mapMutations 来映射 mutations } } ``` 最后,我们可以在组件的 template 中使用 counter 来显示计数器的值,并通过按钮绑定 increment 和 decrement 方法来实现加水和放水的功能。 ```html <template> <div> <p>当前计数器的值为:{{ counter }}</p> <button @click="increment">加水</button> <button @click="decrement">放水</button> </div> </template> ``` 以上就是使用 Vuex 实现加水和放水功能的例子。我们通过在全局状态中存储计数器的值,并定义对应的 mutations 来修改值,实现了组件之间的数据共享和统一管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值