vue3中使用vuex

这篇具有很好参考价值的文章主要介绍了vue3中使用vuex。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近发现自己遗忘了一些东西,所以就去恶补了一下vuex的使用,结果还行还用有点变化的,vue3中使用vuex和vue2中完全不一样,vue3中必须使用vuex4

vuex官网

官方解释

vue3使用vuex,vue,前端,javascript,html5,vue

一、基本认识,以及使用

vuex是什么

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

vuex的工作原理图

vue3使用vuex,vue,前端,javascript,html5,vue

 解决的痛点

痛点:  当我们的应用遇到多个组件共享状态时,单向数据流的简洁性很容易被破坏

          多个视图依赖于同一状态。 

          来自不同视图的行为需要变更同一状态

vuex的基本使用

注意:如果你使用的是vue3那么vuex的版本因该对应是vuex4

npm i vuex

然后我们在src在创建一个store文件来存放代码

import { createStore } from 'vuex'

export default createStore({
    state: {
        name:"小王"
    },
    mutations: {
    },
    actions: {
    },
    modules: {
    }
})

 在mian中引入引入

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
import store from './store';

import '@/style.css'
import 'element-plus/dist/index.css'
const app = createApp(App)

app.use(router);
app.use(store);
app.mount('#app')

 然后就可以在页面展示出来了

<template>
  <div>
    <div>{{ store.state.name }}</div>
  </div>
</template>

<script setup lang="ts">
import { useStore } from "vuex";
const store = useStore();
</script>

<style scoped>
</style>

vue3使用vuex,vue,前端,javascript,html5,vue

vuex中一共有五个状态

State  Getter  Mutation   Action   Module  下面进行详细讲解

state  

vuex的自身状态,是单一数据源

就不演示了,上面的代码已经演示过了

mutations

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation  (通过commit 来触发mutations)

我们通过commit 来触发mutations 中对应得方法

commit接收两个参数: 第一个参数是mutations中对对应得方法名字,第二个参数是传递过去得参数

muitations中得方法会接收两个参数第一个是:state指向state仓库, 第二个参数payload 是传过来得数据

组件中

<template>
  <div>
    <div>{{ store.state.name }}</div>
    <el-button type="primary" @click="hanlderBut">开始操作</el-button>
  </div>
</template>

<script setup lang="ts">
import { useStore } from "vuex";
const store = useStore();

const hanlderBut = () => {
  console.log("开始操作");
  store.commit("setName", { value: "我被修改了" });
};
</script>

<style scoped>
</style>

store文件中

mustations 中的方法

(state:指向仓库的窗台,payload: 触发时候载荷的参数)=>{}
import { createStore } from 'vuex'

export default createStore({
    state: {
        name: "小王"
    },
    mutations: {
        setName: (state, payload) => {
            state.name = payload.value;
        }
    },
    actions: {
    },
    modules: {
    }
})

 vue3使用vuex,vue,前端,javascript,html5,vue

actions

acitons和mutations差不多,不同出在于 acitons是提交给mustations,不能直接去修改vuex的状态, 还有个重大区别是mutations是不可以执行异步,actions却可以执行(通过dispatch来触发actions)

actions 中得方法接收两个参数,context上下文环境,payload 传递过来得数据

store

import { createStore } from 'vuex'

export default createStore({
    state: {
        name: "小王"
    },
    mutations: {
        setName: (state, payload) => {
            state.name = payload.value;
        }
    },
    actions: {
        hanlderName: (context, payload) => {
            context.commit("setName", payload)
        }
    },
    modules: {
    }
})


 组件中

<template>

  <div>

    <div>{{ store.state.name }}</div>

    <el-button type="primary" @click="hanlderBut">开始操作</el-button>

  </div>

</template>



<script setup lang="ts">

import { useStore } from "vuex";

const store = useStore();



const hanlderBut = () => {

  console.log("开始操作");

  store.dispatch("hanlderName", { value: "我要通过actions来修改" });

};

</script>



<style scoped>

</style>

vue3使用vuex,vue,前端,javascript,html5,vue

getter 

vuex的计算属性,和vue2中computed差不多 使用来完成一些计算操作的

不过要注意这个 ,缓存机制相当重要

vue3使用vuex,vue,前端,javascript,html5,vue

 getteres中的参数接收一个参数,指向state状态

store文件

import { createStore } from 'vuex'

export default createStore({
    state: {
        name: "小王"
    },
    getters: {
        getName: (state) => {
            return state.name
        }
    },

})


 组件中

<template>
  <div>
    <div>{{ store.getters["getName"] }}</div>
    <el-button type="primary" @click="hanlderBut">开始操作</el-button>
  </div>
</template>

<script setup lang="ts">
import { useStore } from "vuex";
const store = useStore();

const hanlderBut = () => {
  console.log("获取数据:", store.getters["getName"]);
};
</script>

<style scoped>
</style>

modules

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:

 子模块(这里注意namespaced  为true, 必须开启空间命名)

export default {
    namespaced: true,
    state: {
        userInfo: {
            name: "孩子·",
            age: 12,
            sex: 1
        }
    },
    mutations: {
        setAge: (state: { userInfo: { age: number; }; }, payload: { value: number; }) => {
            if (state.userInfo.age >= payload.value) {
                state.userInfo.age += state.userInfo.age;
                return;
            }
            state.userInfo.age = payload.value
        }
    },
    actions: {
        setAge: (context: { commit: (arg0: string, arg1: any) => void; }, payload: any) => {
            context.commit("setAge", payload)
        }
    },
}

 根模块

import { createStore } from 'vuex'
import children from './modules/children';
export default createStore({

    modules: {
        children
    }
})

组件中使用:

commit和dispatch的使用一样 注意第一个参数即可

<template>
  <div>参数: {{ store.state.children.userInfo.age }}</div>
  <div>
    <el-button type="primary" @click="hanlderBut">开始操作</el-button>
  </div>
</template>

<script setup lang="ts">
import { useStore } from "vuex";

const store = useStore();
const hanlderBut = () => {
  store.dispatch("children/setAge", { value: 100 });
};
</script> 

<style scoped>
</style>

效果图:

vue3使用vuex,vue,前端,javascript,html5,vue文章来源地址https://www.toymoban.com/news/detail-805542.html

到了这里,关于vue3中使用vuex的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3中监听,组件通信如父子传值、Vuex、Event Bus的使用

    目录 一、监听 二、父子传值: 1、父传子: 2、子传父 三、全局状态管理(Vuex): 四、事件总线(Event Bus): 我们有一个父组件ParentComponent和一个子组件ChildComponent。在父组件中,我们使用:childProp=\\\"parentData\\\"将数据传递给子组件。在子组件中,我们使用defineProps来接收父组件

    2024年02月13日
    浏览(40)
  • vue3中状态管理库pinia的安装和使用方法介绍及和vuex的区别

    Pinia 与 Vuex 一样,是作为 Vue 的“状态存储库”,用来实现 跨页面/组件 形式的数据状态共享。它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的话,你可能会认为可以通过一行简单的 export const state = reactive({}) 来共享一个全局状态。 当该数据、方法在很多地方都需要

    2024年01月20日
    浏览(44)
  • 10 使用Vue+axios+Vuex实现登录后前端数据本地化存储实战

    这已经是《 Vue + SpringBoot前后端分离项目实战 》专栏的前端部分第8篇博客了, 服务端部分 由天哥(天哥主页)负责,目前专栏目录如下: Vue + SpringBoot前后端分离项目实战 - 前端部分 1. 手把手带你做一套毕业设计-征程开启 2. 我应该把毕业设计做到什么程度才能过关? 3

    2024年02月16日
    浏览(41)
  • 前端2023最全面试题(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的闭包是一种函数,它有权访问其词法环境的变量和其它函数。这意味着,即使其包含它的函数已经执行完毕,其词法环境仍然存在,因此可以访问其作用域内的变量。 答案:回调函数是在某个特定事件之后执行的函数。在JavaScript中,通常使用回调函数来处

    2024年02月06日
    浏览(65)
  • uni-app小程序(vue3版本)使用Vuex在调用store时报错: Cannot read property ‘state‘ of undefined

    这里是开发购物车相关的功能时遇到bug报错,如图所示   通过搜索是因为我开发的uni-app是vue3版本,但是在使用vuex时使用的是2版本的格式所造成的错误 一、首先配置vuex 1. 在项目根目录中创建 store 文件夹,专门用来存放 vuex 相关的模块 2. 在 store 目录上鼠标右键,选择 新建

    2024年02月15日
    浏览(54)
  • Vue2向Vue3过度Vuex核心概念mutations

    1.定义mutations 2.格式说明 mutations是一个对象,对象中存放修改state的方法 3.组件中提交 mutations 4.练习 1.在mutations中定义个点击按钮进行 +5 的方法 2.在mutations中定义个点击按钮进行 改变title 的方法 3.在组件中调用mutations修改state中的值 5.总结 通过mutations修改state的步骤 1.定义

    2024年02月11日
    浏览(44)
  • Vue3解决Vuex异步获取数据,页面先渲染问题

    在vuex中异步请求数据,页面获取vuex中的数据渲染页面时,数据还未返回时,页面还未渲染。 解决方法: 在数据还未返回时,先不渲染页面结构,使用骨架屏等待数据请求 等待数据返回之后,设置isShow为true,同时重新渲染页面 完美解决Vue3数据异步获取为完成,页面提前渲

    2024年02月11日
    浏览(55)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

    Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态) :Vuex 使用单一状态树,即一个对象包含全部的应用层级状态。这个状态树对应着一个应用中的所有状态。 Gett

    2024年01月23日
    浏览(48)
  • 前端vue入门(纯代码)21_vuex

    努力不一定成功,但是,不努力一定很轻松!!! 【 23.Vuex 】 [可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org)) 问题1:Vuex是什么? 【官方理解1】:Vuex 是一个专为 Vue.js 应用程序开发的 状态【数据】管理模式 。它采用集中式存储管理应用的所有组件的状态,并以相应

    2024年02月13日
    浏览(55)
  • 前端Vue入门-day07-Vuex入门

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境  创建一个空仓库 state 状态 1. 提供数据: 2. 使用数据: mutations  辅助函数 - mapMutations actions 辅助函数 - mapAc

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包