web前端开发之Vuex基础

本文详细介绍了Vuex,一个专为Vue.js应用程序设计的状态管理模式。Vuex的核心概念包括响应式状态存储、提交Mutation改变状态、使用Action处理异步逻辑,以及通过Getters获取计算属性。文章通过实例展示了Vuex的安装、配置、父子组件间通信以及如何使用mapState和mapGetters等辅助函数。同时,讲解了Vuex如何解决传统全局对象的不足,实现更有效和可控的状态管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vuex基础

一、Vuex 是什么

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

每一个 Vuex 应用的核心就是 store(仓库)

  • “store”基本上就是一个容器。
  • 它包含着应用中大部分的状态 (state)
  • Mutations 存放的是改变state的方法
  • Actions 存放的是一些业务逻辑,通常为异步任务

Vuex 和单纯的全局对象有以下两点不同:

  • Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  • 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。

二、如何使用Vuex

2.1安装

在创建vue脚手架项目时 如果没有安装Vuex 则需要单独安装

npm install vuex
2.2 新建store文件

在src路径下新建store文件夹 并在中新建index.js

index.js文件进行初始化(仅需要提供一个初始 state 对象和一些 mutation)

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

Vue.use(Vuex)

const store = new Vuex.Store({
  //vuex 中的状态
  state: {

  },
  // vuex 中改变状态的方法
  mutations: {
      
  }
})
export default store

2.3 引入

为了在 Vue 组件中访问 this.$store property,你需要为 Vue 实例提供创建好的 store。Vuex 提供 了一个从根组件向所有子组件,以 store 选项的方式“注入”该 store 的机制:

修改main.js

import Vue from 'vue'
import App from './App.vue'
// 引入store
import store from './store'

Vue.config.productionTip = false

new Vue({
  //挂载到当前实例
  store,
  render: h => h(App)
}).$mount('#app')

三、父子传值问题

3.1 App.js
<template>
  <div id="app">
    <my-cut :count="count"></my-cut>
  </div>
</template>
3.2 index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
    state:{
        count:0
    },
    mutations:{
        add(){
            this.state.count++
        },
    }
})
export default store
3.3 Add.vue
    <div class="add">
        // 因为store已经挂载到vue实例中
		// 所以可以通过$store下边的state下边的count获取数据
        <p>当前count变量的值是:{{$store.state.count}}</p>
        <button @click="add">+1</button>
    </div>
</template>
<script>
export default {
    methods:{
        add(){
            //不能直接修改state状态中的值
            // 需要使用commit提交修改
            this.$store.commit('add')
        }
    }
}
</script>

四、核心概念

4.1 states

单一状态树 每个应用中只能包含一个store实例

  • vuex 中的 state 相当于组件中的 data
  • State中的数据与组件 data 中的数据一样,也是响应式的
const store = new Vuex.Store({
    state:{
        count:10,
        name:'onlifes'
    }
})
4.1.1 计算属性(辅助函数)
<template>
  <div class="item">
    <p>{{ names }}</p>
    <p>{{ prices }}</p>
  </div>
</template>
<script>
export default {
  // 计算属性
  computed: {
    names() {
      return this.$store.state.name;
    },
    prices() {
      return this.$store.state.price;
    },
  },
};
</script>

每次都要定义一个函数 很麻烦,于是:

辅助函数mapState

//通过辅助函数mapState简化计算属性
    computed:mapState({
        names(state){
            return state.name
        }
        //可简写成
         names :state => state.name
        //在简写
        // 属性名(想要使用的计算名称):值(使用的store中的属性名称)
        names:'name'
    })

        // 如果你的计算属性名称与值相同
        computed:mapState(['name','price'])
4.1.2 展开运算符
    computed:{
        ...mapState(['name','price'])
    }

那为什么要脱裤子放P 多此一举呢

    computed:{
        // 组件拥有的计算属性
        address:function(){
            return '背景'
        },
        // store拥有的计算属性
        ...mapState(['name','price'])
    }
4.2 getters获取器
  • Getter用于对Store中的数据进行加工处理形成新的数据
  • 它只会包装Store中保存的数据,并不会修改Store中保存的数据
  • 当Store中的数据发生变化时,Getter 生成的内容也会随之变化

简单使用

index.js

getters:{
        count:function(state){
            return state.list.length
        }
    	//可简写成
        count:state => state.list.length
    }

item.vue

<p>列表中一共有{{$store.getters.count}}条数据</p>

我们可以看到获取的时候代码很长 此时我们可以使用计算属性mapGetters

import {mapGetters} from 'vuex'
4.2.1 用法
computed:{
        ...mapGetters(['count'])
}
4.3 mutation

mutations作用就是让组件可以通过mutations改变state中的值

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation 比如想给 todos 中增加一个新的事项,不能直接修改,只能通过 mutation 才可以

4.3.1 基本使用

index.js

// mutations作用就是让组件可以通过mutations改变state中的值
    mutations:{
        addList(state,newList){
            state.list.push(newList)
        }
    }

App,vue

//引入辅助函数
import { mapMutations } from "vuex";

 methods: {
     // 展开
    ...mapMutations(['addList']),
    // 触发add事件
    add(){
        const newList = { id: this.count+1, title: "我没时间了啊", author: "张三" }
        // 调用mutations中的方法
        this.addList(newList)
    }

  },
<button @click="add">新增列表</button>
<think>嗯,用户让我介绍一下Web前端开发。我需要先理清什么是Web前端开发,然后分步骤解释清楚。首先,得明确前端和后端的区别,可能用户不太清楚这些术语。然后,要介绍前端开发的核心技术,比如HTML、CSS、JavaScript,这些是基础。接着,可能需要提到现代的前端框架和工具,比如React、Vue、Angular,还有构建工具如Webpack。另外,响应式设计和跨浏览器兼容性也是重点。用户可能想知道前端开发者的职责和工作流程,所以需要涵盖从设计稿到实现的过程,以及测试和优化的部分。还要提一下前端的发展趋势,比如WebAssembly、PWA等新技术。要确保用中文,结构清晰,语言通俗易懂,避免使用太专业的术语,或者在必要时解释清楚。同时,注意数学表达式的格式要求,不过这个问题可能不太涉及数学内容,但如果有变量或代码示例,可能需要用代码块。需要检查是否符合系统级指令,比如行内公式用$...$,独立公式用$$...$$,但前端开发可能更多涉及代码而不是数学公式,所以这部分可能用得少。不过如果有提到算法或数学相关内容,比如动画计算,可能需要使用LaTeX。比如,提到布局中的弹性盒子模型,或者动画中的贝塞尔曲线,这时候可能需要数学表达式,但不确定用户是否需要。所以可能主要集中在前端技术栈和流程的介绍上。最后,确保回答真实可靠,结构清晰,分点说明,帮助用户逐步理解。可能需要分成几个部分:定义、核心技术、工具与框架、工作流程、发展趋势等。检查有没有遗漏的重要点,比如版本控制(Git)、包管理器(npm/yarn),或者前端性能优化技巧。确保覆盖全面,但不过于冗长。现在开始组织语言,用中文,自然口语化,避免使用Markdown格式,但根据用户层的指示,结构要清晰,可能需要分点列举。需要确认用户是否可能有后续问题,比如如何学习前端开发,是否需要学习路线建议,但用户没有问,所以暂时不深入。总之,目标是给用户一个全面而清晰的Web前端开发介绍,涵盖基本概念、技术栈、工具、职责和发展趋势,同时保持回答的易懂和结构合理。</think>Web前端开发是构建网站或Web应用中用户直接交互部分的过程。以下是分步介绍: 一、核心概念 1. 定义:负责将设计稿转化为用户可见的网页界面,处理页面布局、交互逻辑和数据展示。 2. 与后端的区别:$$前端代码运行在浏览器$$,而后端代码运行在服务器 二、技术基础 1.基石: - $HTML$(内容结构) - $CSS$(视觉表现) - $JavaScript$(交互逻辑) 2. 进阶技术栈: ```javascript // 示例:React组件 function Button({ text }) { return <button className="primary-btn">{text}</button>; } ``` 三、现代开发要素 1. 框架/库(提高效率): - React/Vue/Angular - 状态管理:Redux/Vuex 2. 工程化工具: - 构建工具:Webpack/Vite - 包管理:npm/yarn - 版本控制:Git 四、关键技能要求 1. 响应式设计:确保页面适配$$不同设备尺寸$$ 2. 跨浏览器兼容:处理不同浏览器的渲染差异 3. 性能优化: - 减少HTTP请求 - 代码压缩:$$文件体积_{优化} = 原始体积 \times 0.7$$ - 懒加载技术 五、开发流程示例 1. 需求分析 → 2. UI设计对接 → 3. 代码实现 → 4. 联调测试 → 5. 部署上线 六、发展趋势 1. 新技术方向: - WebAssembly(高性能计算) - PWA(渐进式Web应用) - WebGL(3D可视化) 2. 全栈化趋势:Node.js前端可参与服务端开发 建议学习路径:先掌握基础三件套,再逐步学习框架和工程化知识,最后深入特定领域(如数据可视化、移动端开发等)。实际开发中需要持续关注W3C标准更新和浏览器特性支持变化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端大斗师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值