【前端VUE基础(七)】Vuex进行开发的一般流程

使用Vuex进行开发的一般流程如下:

一、安装和配置Vuex: 

在Vue项目中,通过npm安装Vuex。

 (一)使用npm安装Vuex:

npm install vuex --save

(二)main.js中引入Vue和Vuex:

        在主入口文件(通常是main.js)中引入和配置Vuex,在Vue实例化之前,将创建的Store通过Vue的全局API Vue.use() 进行注册。

import Vue from 'vue';
import App from './App.vue';
import store from './store';

new Vue({
  store, // 注册Vuex Store
  render: (h) => h(App),
}).$mount('#app');

二、创建Vuex Store: 

创建一个新的.js文件用于定义和配置Vuex的核心组成部分 - Store。在Store中定义state、mutations、actions、getters等。

 (一)新建store文件夹

在项目中新建一个store文件夹,用于存放Vuex相关文件,如果存在则直接使用即可。

 (二)新建index.js文件

在store文件夹中创建一个新的.js文件(通常命名为index.js),用于定义和配置Vuex的Store,如果存在则直接使用即可。

// store/index.js

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

// 引入 getters 模块
import getters from './getters' 
// 引入 app 模块
import app from './modules/app'
// 引入 settings 模块
import settings from './modules/settings' 
// 引入 user 模块
import user from './modules/user' 

Vue.use(Vuex)

// 创建 Vuex store 实例
const store = new Vuex.Store({
modules: {
app,      // 注册 app 模块
settings, // 注册 settings 模块
user      // 注册 user 模块
},
getters   // 注册 getters 模块
})

export default store

 (三) 新建Vuex Store

创建一个新的Vuex Store,并定义state、mutations、actions和getters。

import { } from '@/api';
// state【仓库当中的商品】 
//       (提供唯一的公共数据源)数据状态
const state ={

}
// mutations【操作商品的工人】 函数,
//           同步操作(用于变更store中的数据)不能执行异步操作,延时器
const mutations= {

}
// actions【发送命令的老板】 
//        用于处理异步任务,必须通过context.commit()触发某个mutations方式间接的变更数据。
const actions={

}
//  getters【二次加工】 
//         (用于对store中的数据进行加工处理形成新的数据)(不会修改state中的数据)
const getters={

}

export default{
    state,
    actions,
    mutations,
    getters
}

 (1)定义State:State是存储应用程序状态的地方。在Store中定义state对象,并初始化需要共享的数据。

(2)定义Mutations:Mutations是用于更改State的方法。在Store中定义mutations对象,并编写对State进行修改的方法。

(3)定义Actions:Actions用于处理异步操作和业务逻辑,并提交Mutations来修改State。在Store中定义actions对象,并编写需要执行的操作。可以通过调用后端接口获取数据,并在成功后提交相应的Mutation。

(4)定义Getters:Getters用于从State中派生出一些新的状态值,类似于计算属性。在Store中定义getters对象,并编写需要派生的状态值的方法。

参考案例

//api/index.js
//当前模块,API进行统一管理,即对请求接口统一管理
import requests from "@/api/request";

// 获取用户地址 /api/user/userAddress/auth/findUserAddressList
export const reqAddressInfo = ()=>requests({url:'/user/userAddress/auth/findUserAddressList',method:'get'});

// 获取订单交易页信息 /api/order/auth/trade
export const reqOrderInfo = ()=>requests({url:'/order/auth/trade',method:'get'});
import { reqAddressInfo ,reqOrderInfo } from '@/api';
// state【仓库当中的商品】 (提供唯一的公共数据源)数据状态
const state = {
    address:[],
    orderInfo:{},

}
// mutations【操作商品的工人】 函数,同步操作(用于变更store中的数据)不能执行异步操作,延时器
const mutations = {
    GETUSERADDRESS(state,address){
        state.address=address;
    },
    GEtORDERINFO(state,orderInfo){
        state.orderInfo=orderInfo;
    }

}
// actions【发送命令的老板】 用于处理异步任务,必须通过context.commit()触发某个mutations方式间接的变更数据。
const actions = {

    // 获取用户地址信息
    async getUserAddress({ commit }) {

        let result = await reqAddressInfo();
        if (result.code == 200) {
            commit('GETUSERADDRESS',result.data);
        } 
    },
    // 获取订单交易页信息
    async getOrderInfo({commit}){
       let result = await reqOrderInfo();
       if (result.code == 200) {
         commit('GEtORDERINFO',result.data);
       }

    }

}
//  getters【二次加工】  (用于对store中的数据进行加工处理形成新的数据)(不会修改state中的数据)
const getters = {

}

export default {
    state,
    actions,
    mutations,
    getters
}

  三、在组件中使用Vuex

        在组件中使用 Vuex:在需要使用 Vuex 的组件中,通过 this.$store 访问 Vuex Store,并使用 computed 属性、methods 或 watch 来获取 state、派生状态、触发 actions 等:

<script>
import { mapState } from 'vuex';
export default {
  name: 'Trade',
  data() {
    //收集买家的留言信息
    return {
      msg: ''
    }

  },
  // 生命周期函数:挂载完毕
  mounted() {
    this.$store.dispatch('getUserAddress');
    this.$store.dispatch('getOrderInfo');
  },
  computed: {
    ...mapState({
      addressInfo: state => state.trade.address,
      orderInfo: state => state.trade.orderInfo,
    }),
    // 提交订单时最终选中的地址
    userDefaultAddress() {
      // find:查找数组中符合条件的元素返回,作为最终结果
      return this.addressInfo.find(item => item.isDefault == 1) || {};
    }
  },
  methods: {
    //修改默认地址
    changeDefault(address, addressInfo) {
      addressInfo.forEach(item => item.isDefault = 0)
      address.isDefault = 1;
    },
    // 提交订单
   async  submitOrder() {
      // 交易编码
      let { tradeNo } = this.orderInfo;
      let data = {
        "consignee": this.userDefaultAddress.consignee, //最终收件人姓名
        "consigneeTel": this.userDefaultAddress.phoneNum,//最终收件人手机号
        "deliveryAddress":this.userDefaultAddress.fullAddress,//最终收件人地址
        "paymentWay": "ONLINE",//支付方式
        "orderComment":this.msg,//买家留言
        "orderDetailList":this.orderInfo.detailArrayList,//商品清单
      };
      let result =  await this.$API.reqSubmitOrder(tradeNo,data);
      if(result.code == 200 ){
        this.orderId = result.data;
        // 路由跳转+路由传递参数
        this.$router.push('/pay?orderId='+this.orderId);
      }else{
        alert(result.message);
      }
    },
  }
}
</script>

首先,在组件文件中导入 mapState 辅助函数和 Vuex 的 store:

import { mapState } from 'vuex';
import store from './store'; // 假设 store 文件的路径为 './store'

         在组件的 computed 部分使用 mapState 将 Vuex 的状态映射到组件的计算属性上。mapState 函数接受一个对象参数,对象的键是计算属性的名称,值是一个函数或者是一个字符串,用于指定需要从 Vuex 状态中取值的属性。

computed: {
  ...mapState({
    addressInfo: state => state.trade.address,
    orderInfo: state => state.trade.orderInfo,
  }),
}

        上述代码中,将 Vuex 的 state.trade.address 映射为组件的 addressInfo 计算属性,将 state.trade.orderInfo 映射为组件的 orderInfo 计算属性。

        通过这样的映射,组件就可以像使用本地计算属性一样使用 Vuex 的状态,在模板中可以直接使用这些计算属性来访问 Vuex 中的数据。

 

 四、在模板中绑定数据

通过模板语法,在组件的模板中绑定和展示从Vuex中获取的数据。在 Vue 组件中,你可以使用双花括号或者指令来绑定数据到模板。以下是几种常见的绑定方式:

(一) 使用双花括号 {{ }} 进行插值绑定:

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

 上述代码中,message 是组件的 data 配置项中定义的一个属性,它将被渲染到 <p> 标签中。

(二) 使用 v-bind 指令进行属性绑定:

<template>
  <div>
    <img v-bind:src="imageUrl" alt="Image">
  </div>
</template>

在上述示例中,imageUrl 是组件的 data 配置项中定义的一个属性,使用 v-bind 指令将该属性的值绑定到 <img> 标签的 src 属性上。 

 (三)使用 v-model 指令进行双向数据绑定:

<template>
  <div>
    <input v-model="name" type="text">
    <p>Hello, {{ name }}!</p>
  </div>
</template>

上述代码中,name 是组件的 data 配置项中定义的一个属性,使用 v-model 指令将表单输入框和 name 属性进行双向绑定。当用户在输入框中输入内容时,name 属性会自动更新,并且变更后的值也会同步显示在 <p> 标签中。 

10、触发Actions或Mutations:通过组件中的用户交互或其他事件,触发Actions或Mutations来修改State。

11、监听State的变化:可以通过Vuex提供的API store.subscribe() 来监听State的变化,以便根据需要执行一些操作,例如保存到本地存储或发送通知。

以上是使用Vuex进行开发的一般流程。通过Vuex可以有效地管理应用程序的状态,实现数据的共享和统一管理。同时,Vuex还提供了一些辅助函数和工具,使得状态的修改和获取更加便捷。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建前端Vue项目的流程如下: 1. 环境准备:确保已经安装了Node.js和npm(或者使用yarn)。 2. 安装Vue CLI:使用npm或yarn全局安装Vue CLI,命令为:`npm install -g @vue/cli` 或 `yarn global add @vue/cli`。 3. 创建新项目:在命令行中执行`vue create 项目名`命令,创建一个新的Vue项目。你可以选择手动配置选项或使用默认配置。 4. 选择配置:如果选择手动配置,会出现一系列问题,包括选择Vue版本、Babel和TypeScript的配置、是否使用ESLint等。根据项目需求进行选择并进行相应的配置。 5. 安装依赖:等待项目创建完成后,进入项目目录,执行`npm install` 或 `yarn install`命令,安装项目所需的依赖。 6. 开发与构建:执行`npm run serve`或`yarn serve`命令,启动开发服务器,开始开发调试。在开发过程中,可以通过修改src目录下的文件来编写Vue组件和逻辑代码。 7. 页面和组件开发:根据项目需求,设计和编写页面和组件。Vue项目中,页面通常由多个组件组成,可以使用单文件组件(.vue文件)来编写组件。 8. 数据管理和路由配置:根据需要,可以选择使用Vue提供的状态管理工具Vuex来管理应用的状态,并配置Vue Router来实现前端路由。 9. 调试和测试:在开发过程中,可以使用Vue Devtools等工具进行调试和性能优化。同时,可以编写单元测试和端到端测试来确保项目的质量。 10. 打包和部署:在开发完成后,执行`npm run build`或`yarn build`命令,将项目打包成静态文件。将生成的dist目录中的文件部署到服务器或云平台上即可。 以上是搭建前端Vue项目的一般流程,根据实际需求和团队偏好,可能会有一些微调。祝你搭建项目顺利!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值