vuex的使用笔记

9 篇文章 0 订阅
8 篇文章 0 订阅

1、安装

//安装vuex
npm install vuex --save

在src目录下创建store文件夹,并创建index.js数据仓库

index.js

import Vue form 'vue'
import Vuex form 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        city: '杭州'
    } //此处为数据
})

在main.js中引入

main.js

import Vue from 'vue'
import store form './store' //此处相当于'./store/index'

new Vue({
    el: '#app',
    store
})

2、读取数据

读取store中的数据(store文件中的数据可以在各个组件中读取)

<template>
    <div>{{this.$store.state.city}}</div>
</template>

<script>

export default {
    data () {
        return {
            city: this.$store.state.city
        }
    }
}

</scrtpt>

读取数据优化

<template>
    <div>{{this.currentCity}}</div>
</template>

<script>
<!--mapState为vuex内部方法-->
import {mapState} from 'vuex' 

export default {
    data () {
        return {
            city: this.currentCity
        }
    },
    computed: {
        <!--通过扩展运算符对数据进行展开-->
        <!--把vuex中的city属性映射到组件的computed属性currentCity中-->
        ...mapState({
            currentCity: 'city' 
        })
    }
}

</scrtpt>

3、改变store中的数据

组件中

<script>

export default {
    data () {
        city: '上海'
    },
    mounted () {
        //派发一个changeCity并传递新的数据
        this.$store.dispatch('changeCity',this.city);
    }
}

</scrtpt>

store中的index.js

import Vue form 'vue'
import Vuex form 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        city: '杭州'
    }, //此处为数据
    actions: {
        //此处的changeCity为组件中派发的事件
        changeCity (ctx, city) {
            //此处能读取到组件中传过来的city值
            //然后需要把city值写入store中
            ctx.commit('changeCity', city)
        }
    },
    mutations: {
        //此处写actions中触发的事件
        changeCity (state, city) {
            //赋值state
            state.city = city
        }
    }
})

步骤:
组件中调用store的dispatch方法触发actions,actions触发后通过调用commit触发mutations对store中的数据重新赋值。其中actions步骤可省略,直接在组件中调用this.$store.commit方法

3、防止页面刷新数据丢失,需要用localStorage对数据进行存储

store中index.js

import Vue form 'vue'
import Vuex form 'vuex'

Vue.use(Vuex)

//此处是为了防止某些浏览器关闭了localStorage功能而导致抛出异常的兼容
let defaultCity = '杭州'
try {
    if (localStorage.city) {
        defaultCity = localStorage.city
    }
} catch (e) {}

export default new Vuex.Store({
    state: {
        city: defaultCity
    }, //此处为数据
    actions: {
        //此处的changeCity为组件中派发的事件
        changeCity (ctx, city) {
            //此处能读取到组件中传过来的city值
            //然后需要把city值写入store中
            ctx.commit('changeCity', city)
        }
    },
    mutations: {
        //此处写actions中触发的事件
        changeCity (state, city) {
            //赋值state
            state.city = city
            //设置localStorage值
           try {
                localStorage.city = city
           } catch (e) {}
        }
    }
})

4、方法的拆分

对于复杂的store可以拆分成不同的文件,可以拆分成state.js、actions.js和mutations.js,然后在index.js中引入这些文件

index.js

import Vue form 'vue'
import Vuex form 'vuex'
import state from './state'
import actions from './actions'
import mutations from './mutations'

Vue.use(Vuex)

export default new Vuex.Store({
    state: state,
    actions: actions,
    mutations: mutations
})

例如state.js

let defaultCity = '杭州'
try {
    if (localStorage.city) {
        defaultCity = localStorage.city
    }
} catch (e) {}

export default {
    city: defaultCity
}

5、使用getter对vuex中的state数据进行重新计算返回计算后的结果

getter相当于组件中的computed,从而减少每个组件计算的代码冗余

getters: {
    dobuleCity: (state) {
      return state.city + ' ' + state.city
    }
  }

6.使用module可以把vuex分成一个个模块,从而减少单个文件过于庞大

其中state、actions、mutations都可以拆分

高级用法传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vuex Models是一个用于在Vue.js应用程序中管理数据的库。它提供了一种模块化的管理模式,可以将store划分为多个模块(module),每个模块都有自己独立的state、mutation、action和getter。 使用Vuex Models非常简单。首先,您需要导入`genVuexModels`函数并使用它来生成存储字段。然后,在您的store配置中,将这些存储字段放在`models`对象中。例如,您可以在`store/index.js`文件中进行配置,如下所示: ```javascript // your imports import { genVuexModels } from 'vuex-models' // Vue.use(Vuex), etc // First argument ... const models = genVuexModels({ a: { state: {}, mutation: {}, getters: {}, // ... }, // ... }) export default new Vuex.Store({ // ... models, // ... }) ``` 通过这样配置,您就可以在Vue组件中轻松地访问和修改存储字段。例如,您可以使用`this.$models.a.state`来访问模块`a`的state,使用`this.$models.a.mutation`来提交模块`a`的mutation,使用`this.$models.a.getters`来获取模块`a`的getter。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vuex-models:vue组件和vuex存储之间的简单双向数据绑定](https://download.csdn.net/download/weixin_42151305/16637681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue学习笔记 —— Vuex之Models(模块化管理模式)](https://blog.csdn.net/weixin_43340295/article/details/110002537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值