search
HomeWeb Front-endJS TutorialHow to use vuex state and mapState

This time I will show you how to use vuex state and mapState, and what are the precautions for using vuex state and mapState. The following is a practical case, let's take a look.

First use vue cli to build your own vue project

1.npm i -g vue-cli

2.vue init webpack sell (sell is you Project name)
3. Press Enter all the way (during this process you will be prompted whether to install some dependent packages, such as vue-router, es6 grammar check, etc., select Y/N based on your personal habits or hobbies)
4.npm i (This is the dependency package of the installation project)
5.npm run dev (start your vue project) At this time, if you see the vue logo on the page, it means that your vue project base has been built Completed, then you can delete the useless components
6. Webpack sell does not install vuex by default, so you need to install vuex; press ctrl c twice on the command line to end the server, npm install vuex –save to install vuex.
7. Create a new vue component in your src directory. Let’s name it helloVuex (you can name it as you like, just be happy). This component is mainly used as the main container and only displays content
8. Then create a new one What the hell is the component called (I’ll call it the
display component here) used to accept the state in the state 9. Next, we create a new folder called store in the src directory, and create a new one under the store js file, called test.js (the store here is our front-end data warehouse) uses vuex for state management. Store is the core of vuex, so it is named store. Create a new store file in the src directory, and create a new test.js in the store directory. Documentation (below). You can see that before using vuex, you need to tell vue to use it, Vue.use(Vuex); We only have one variable count to manage here, so when creating the store object, pass parameters to the
constructor, state There is only one count below, and it is initialized to 0.

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
 state: {
 count: 0
 }
export default store
Now all the status, that is, the variables are placed in test.js, so how can our component get the status modification value? There are two steps to be performed here

1. Vue provides an injection mechanism, which is to inject our store object into the root instance. The root instance of vue is the new Vue constructor, and then in all subcomponents, this.$store points to the store object. In test.js, we export store and the store has been exposed. new Vue() is in main.js, so we can directly introduce the store in main.js and inject it.

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store/test'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 store,
 template: '<app></app>',
 components: { App }
})
2. In child components, use the computed attribute. The computed attribute is automatically updated based on its dependencies. So as long as the state in the store changes, it will automatically change. Make the following changes in display.vue. This.$store in the subcomponent points to the store object. We change the count in test.js to 8, and it becomes 8 on the page.

<template>
 <p>
  </p>
<h3 id="Count-is-count">Count is {{count}}</h3>
 
</template>
<script>
 export default {
  computed: {
   count () {
    return this.$store.state.count 
   }
  }
 }
</script>
3. The status value can be obtained through the computed attribute, but every attribute (such as count) in the component is a function. If there are 10, then 10 functions must be written, and 10 must be written repeatedly. It is not very convenient to return this.$store.state all the time. Vue provides the mapState function, which maps state directly to our components.

Of course you must introduce mapState before using it. It can be used in two ways, either accepting an object or an array. Still under the display.vue component.

The object usage is as follows:

<script>
 import {mapState} from "vuex"; // 引入mapState 
 export default {
      // 下面这两种写法都可以
  computed: mapState({
   count: state => state.count // 组件内的每一个属性函数都会获得一个默认参数state, 然后通过state 直接获取它的属性更简洁  
   count: &#39;count&#39;         // &#39;count&#39; 直接映射到state 对象中的count, 它相当于 this.$store.state.count,
  })
 }
</script>
The array method is as follows:

<script>
 import {mapState} from "vuex";
 export default {
  computed: mapState([ // 数组
   "count"
  ])
 }
</script>
4, There is one last question, what if we also have computed properties inside our components? It doesn't belong in mapState. Then we use object segmentation to divide the objects generated by the mapState function into one by one. Just like at the beginning, we listed the calculated attributes one by one. If there are 10 attributes, we will write 10 functions.

The... in es6 is used for splitting, but it can only split arrays. It can split objects in ECMAScript stage-3, so babel-stage-3 is also used at this time; npm install babel-preset-stage-3 --save-dev. After the installation is complete, don’t forget to add babel in babelrc In the

configuration file, write stage-3,

, otherwise an error will always be reported. Add a p tag to the page to display the calculation familiarity of our component

babelrc

{
 "presets": [
 ["env", {
  "modules": false,
  "targets": {
  "browsers": ["> 1%", "last 2 versions", "not ie display.vue After the component is changed<p style="text-align: left;"></p><pre class="brush:php;toolbar:false"><template>
 <p>
  </p>
<h3 id="Count-is-count">Count is {{count}}</h3>
  <p>组件自己的内部计算属性 {{ localComputed }}</p>
 
</template>
<script>
 import {mapState} from "vuex";
 export default {
  computed: {
   localComputed () {
    return this.count + 10;
   },
   ...mapState({
    count: "count"
   })
  } 
 }
</script>
put test. Change state.count in js to 10 to see an effect

Let’s take a look at the usage of mapState in Vuex

今天使用Vuex的时候遇到一个坑,也可以说是自己的无知吧,折腾了好久,终于发现自己代码的错误了。真是天雷滚滚~~~~~~

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import mutations from './mutations'
import actions from './action'
import getters from './getters'
Vue.use(Vuex)
const state = {
 userInfo: { phone: 111 }, //用户信息
 orderList: [{ orderno: '1111' }], //订单列表
 orderDetail: null, //订单产品详情
 login: false, //是否登录
}
export default new Vuex.Store({
 state,
 getters,
 actions,
 mutations,
})
computed: {
   ...mapState([
    'orderList',
    'login'
   ]),
  }, 
  mounted(){ 
   console.log(typeof orderList); ==>undefind
   console.log(typeof this.orderList)==>object
  }

mapState通过扩展运算符将store.state.orderList 映射this.orderList  这个this 很重要,这个映射直接映射到当前Vue的this对象上。

所以通过this都能将这些对象点出来,同理,mapActions, mapMutations都是一样的道理。牢记~~~

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎样使用Vue实现倒计时按钮

怎样利用Vue写一个双向数据绑定

The above is the detailed content of How to use vuex state and mapState. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Python and JavaScript: Understanding the Strengths of EachPython and JavaScript: Understanding the Strengths of EachMay 06, 2025 am 12:15 AM

Python and JavaScript each have their own advantages, and the choice depends on project needs and personal preferences. 1. Python is easy to learn, with concise syntax, suitable for data science and back-end development, but has a slow execution speed. 2. JavaScript is everywhere in front-end development and has strong asynchronous programming capabilities. Node.js makes it suitable for full-stack development, but the syntax may be complex and error-prone.

JavaScript's Core: Is It Built on C or C  ?JavaScript's Core: Is It Built on C or C ?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltonCorC ;it'saninterpretedlanguagethatrunsonenginesoftenwritteninC .1)JavaScriptwasdesignedasalightweight,interpretedlanguageforwebbrowsers.2)EnginesevolvedfromsimpleinterpreterstoJITcompilers,typicallyinC ,improvingperformance.

JavaScript Applications: From Front-End to Back-EndJavaScript Applications: From Front-End to Back-EndMay 04, 2025 am 12:12 AM

JavaScript can be used for front-end and back-end development. The front-end enhances the user experience through DOM operations, and the back-end handles server tasks through Node.js. 1. Front-end example: Change the content of the web page text. 2. Backend example: Create a Node.js server.

Python vs. JavaScript: Which Language Should You Learn?Python vs. JavaScript: Which Language Should You Learn?May 03, 2025 am 12:10 AM

Choosing Python or JavaScript should be based on career development, learning curve and ecosystem: 1) Career development: Python is suitable for data science and back-end development, while JavaScript is suitable for front-end and full-stack development. 2) Learning curve: Python syntax is concise and suitable for beginners; JavaScript syntax is flexible. 3) Ecosystem: Python has rich scientific computing libraries, and JavaScript has a powerful front-end framework.

JavaScript Frameworks: Powering Modern Web DevelopmentJavaScript Frameworks: Powering Modern Web DevelopmentMay 02, 2025 am 12:04 AM

The power of the JavaScript framework lies in simplifying development, improving user experience and application performance. When choosing a framework, consider: 1. Project size and complexity, 2. Team experience, 3. Ecosystem and community support.

The Relationship Between JavaScript, C  , and BrowsersThe Relationship Between JavaScript, C , and BrowsersMay 01, 2025 am 12:06 AM

Introduction I know you may find it strange, what exactly does JavaScript, C and browser have to do? They seem to be unrelated, but in fact, they play a very important role in modern web development. Today we will discuss the close connection between these three. Through this article, you will learn how JavaScript runs in the browser, the role of C in the browser engine, and how they work together to drive rendering and interaction of web pages. We all know the relationship between JavaScript and browser. JavaScript is the core language of front-end development. It runs directly in the browser, making web pages vivid and interesting. Have you ever wondered why JavaScr

Node.js Streams with TypeScriptNode.js Streams with TypeScriptApr 30, 2025 am 08:22 AM

Node.js excels at efficient I/O, largely thanks to streams. Streams process data incrementally, avoiding memory overload—ideal for large files, network tasks, and real-time applications. Combining streams with TypeScript's type safety creates a powe

Python vs. JavaScript: Performance and Efficiency ConsiderationsPython vs. JavaScript: Performance and Efficiency ConsiderationsApr 30, 2025 am 12:08 AM

The differences in performance and efficiency between Python and JavaScript are mainly reflected in: 1) As an interpreted language, Python runs slowly but has high development efficiency and is suitable for rapid prototype development; 2) JavaScript is limited to single thread in the browser, but multi-threading and asynchronous I/O can be used to improve performance in Node.js, and both have advantages in actual projects.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool