vue项目中通过vuex管理数据

目录

1.前言:

2.vuex的基础用法:

1.构建与挂载vue

基础模板渲染

构建仓库

2.mutations的使用

1.介绍

​编辑

2.案列:

3.传参

4.辅助函数mapMutations:

3.module分对象的写法

介绍

建立模块:

访问数据的方式:

介绍

直接访问

模块导入访问

关于getters/setter


1.前言:

vuex相当于储存在页面后台的数据库。可以供全部组件访问到,相当于全局变量。便于多层级的

2.vuex的基础用法:

1.构建与挂载vue

基础模板渲染

注意:文件存放的位置。

<template>
  <div class="box">
    <h2>Son1 子组件</h2>
    从vuex中获取的值: <label>1</label>
    <br>
    <!-- <button @click="handleAdd(1)">值 + 1</button>
    <button @click="handleAdd(5)">值 + 5</button>
    <button @click="handleAdd(10)">值 + 10</button>
    <button @click="handleChange">一秒后修改成666</button>
    <button @click="changeFn">改标题</button> -->
  </div>
</template>

<script>
export default {
  name: 'Son1Com'
}
</script>

<style lang="css" scoped>
.box{
  border: 3px solid #ccc;
  width: 400px;
  padding: 10px;
  margin: 20px;
}
h2 {
  margin-top: 10px;
}
</style>
<template>
  <div class="box">
    <h2>Son2 子组件</h2>
    从vuex中获取的值:<label>1</label>
    <br />
    <!-- <button @click="subCount(1)">值 - 1</button>
    <button @click="subCount(5)">值 - 5</button>
    <button @click="subCount(10)">值 - 10</button>
    <button @click="changeCountAction(888)">1秒后改成888</button>
    <button @click="changeTitle('前端程序员')">改标题</button> -->
  </div>
</template>

<script>
export default {
  name: 'Son2Com'
}
</script>

<style lang="css" scoped>
.box {
  border: 3px solid #ccc;
  width: 400px;
  padding: 10px;
  margin: 20px;
}
h2 {
  margin-top: 10px;
}
</style>

vue引入

在store.index.js编写如下代码

App.vue

<template>
  <div id="app">
    <h1>
      根组件
      <!-- - {{ title }}
      - {{ count }} -->
    </h1>
    <!-- <input :value="count" @input="handleInput" type="text"> -->
    <Son1></Son1>
    <hr>
    <Son2></Son2>
  </div>
</template>

<script>
import Son1 from './components/Son1.vue'
import Son2 from './components/Son2.vue'
// console.log(mapState(['count', 'title']))

export default {
  name: 'app',
  created () {
    console.log(this.$router) // 没配
    console.log(this.$store)
  },
  data: function () {
    return {

    }
  },
  components: {
    Son1,
    Son2
  }
}
</script>

<style>
#app {
  width: 600px;
  margin: 20px auto;
  border: 3px solid #ccc;
  border-radius: 3px;
  padding: 10px;
}
</style>

在控制台中检测是否挂载成功。因如图一所示。

构建仓库

直接导入

在state下定义数据。

函数导入

前言:

案列:

...manstate的作用就是将数组内的值全挂载到computed中

2.mutations的使用

1.介绍

store的数据也是下行数据,使用数据的组件不能直接对数据进行修改。要完成修改需要通过mutations进行修改。

2.案列:

结果:

3.传参

传参的时候,只能接受一个数据的输入,所以在输入多个数据的时候要把它们打包为一个对象。

数据的双向绑定

案列:

通过input改变,当方生变化时通知vuex变化。

4.辅助函数mapMutations:

actions与gettrs的用法

3.module分对象的写法

介绍

建立模块:

模块文件建立

// user模块
const state = {
  userInfo: {
    name: 'zs',
    age: 18
  },
  score: 80
}
const mutations = {
  setUser (state, newUserInfo) {
    state.userInfo = newUserInfo
  }
}
const actions = {
  setUserSecond (context, newUserInfo) {
    // 将异步在action中进行封装
    setTimeout(() => {
      // 调用mutation   context上下文,默认提交的就是自己模块的action和mutation
      context.commit('setUser', newUserInfo)
    }, 1000)
  }
}
const getters = {
  // 分模块后,state指代子模块的state
  UpperCaseName (state) {
    return state.userInfo.name.toUpperCase()
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}

index中配置

son1直接访问

访问数据的方式:
介绍

直接访问

案列:

右下角可以看到root中包括的数据,其中处于一级的是可以直接引入的。user,title。

将user已对象的形式引入

访问值

模块导入访问

23行导入user模块,再导入其内部的数据

添加标记namespace等于true

关于getters/setter

直接访问与state并不一样

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜间飛行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值