Vue [Day7]

文章目錄

  • 自定義創建項目
  • ESlint 代碼規范
  • vuex 概述
  • 創建倉庫
  • 向倉庫提供數據
  • 使用倉庫中的數據
    • 通過store直接訪問
    • 通過輔助函數 mapState(簡化)
    • mutations傳參語法(同步
    • 實時輸入,實時更新
    • 輔助函數 mapMutations
    • action (異步
    • 輔助函數mapActions
  • getters (類似于計算屬性
    • 通過store訪問getters
    • 通過輔助函數mapGetters映射
  • 模塊module
    • 使用模塊中的數據 / 模塊中state的訪問語法
      • 直接通過模塊名訪問
      • 通過mapState映射
        • 默認根級別的映射 ...mapState(['user', 'setting'])
        • 子模塊映射 mapState('模塊名',['xxx]) +開啟命名空間
    • 使用模塊中getters中的數據 / 模塊中getters的訪問語法
      • 直接通過模塊名訪問 $store.getters['模塊名/xxx']
      • 通過mapGetters映射
        • 默認根級別映射mapGetters(['xxx'])
        • 子模塊映射mapGetters('模塊名',['xxx'])+開啟命名空間Son2.vue
    • 掌握模塊中的mutation調用語法
      • 直接通過store調用 $store.commit('模塊名/xxx',額外參數)
      • 通過mapMutations映射
        • 默認根級別映射mapMutations(['xxx'])
        • 子模塊映射mapMutations('模塊名',['xxx'])+開啟命名空間
      • 直接通過模塊名訪問 $store.dispatch('模塊名/xxx',額外參數)
      • 通過mapActions映射
        • 默認根級別映射mapActions(['xxx'])
        • 子模塊映射mapActions('模塊名',['xxx'])+開啟命名空間

自定義創建項目

vue create exp-mobile(項目名

2.選第三個,自定義

3.空格是選中

在這里插入圖片描述

4.選vue 2.x
在這里插入圖片描述

5.選擇哈希

在這里插入圖片描述
6.選擇Less處理器

在這里插入圖片描述
7.選擇無分號規范

在這里插入圖片描述
8.選擇保存時校驗
在這里插入圖片描述
9.將配置文件放在單獨文件中
在這里插入圖片描述

小結
在這里插入圖片描述

ESlint 代碼規范

在這里插入圖片描述



vuex 概述

在這里插入圖片描述

創建倉庫

在這里插入圖片描述



store/index.js

// 這里存放的就是vuex相關的核心代碼
import Vue from 'vue'
import Vuex from 'vuex'// 插件安裝
Vue.use(Vuex)// 創建空倉庫
const store = new Vuex.Store()// 導出給main.js
export default store


main.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'Vue.config.productionTip = falsenew Vue({render: h => h(App),store //! !!!!//   倉庫在所有組件都可以訪問,用this.$store}).$mount('#app')


App.vue

 created () {console.log(this.$store)}


向倉庫提供數據






store/index.js

// 創建空倉庫
const store = new Vuex.Store({// 通過state可以提供數據,所有組件共享的數據,任意組件都可以訪問state: {title: 'hhhhh',count: 100}
})


使用倉庫中的數據

通過store直接訪問

在這里插入圖片描述




components/Son2.vue

div class="box"><h2>Son2 子組件</h2>從vuex中獲取的值:<label>{{$store.state.count}}</label><br /><button>- 1</button></div>


通過輔助函數 mapState(簡化)

mapState把store中的數據自動映射到組件的計算屬性computed中

computed: {...mapState(['count', 'title'])},

在這里插入圖片描述



App.vue 節選

<template><div id="app"><h1>根組件{{ $store.state.title }}</h1><!-- 3.用了 mapState ,就直接簡寫 --><h1>根組件{{ title }}</h1><input type="text"><Son1></Son1><hr><Son2></Son2></div></template><script>
import Son1 from './components/Son1.vue'
import Son2 from './components/Son2.vue'// 1.導入
import { mapState } from 'vuex'
console.log(mapState(['count', 'title']))export default {name: 'app',//   2.展開運算符進行映射computed: {...mapState(['count', 'title'])},


# 組件(間接)修改倉庫數據 mutation

在這里插入圖片描述



在這里插入圖片描述



store/index.js

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({strict: true,state: {title: 'hhhhh',count: 100},// 通過mutations可以提供修改數據的方法mutations: {// 所有mutations函數,第一個參數,都是stateaddCount (state) {state.count++}}
})export default store

App.vue

    <span  @click="handleAdd">count</span>      <input type="text">methods: {handleAdd () {// 調用this.$store.commit('addCount')}},


mutations傳參語法(同步

提交參數只能有一個,如果有多個參數,包裝成一個對象傳遞
在這里插入圖片描述


實時輸入,實時更新

不能用v-model,因為vuex是單向數據流
但是v-model 等于 :value @input在這里插入圖片描述



App.vue
  <input :value="title" @input="handleInput" type="text">handleInput (e) {// 1.實時獲取輸入框的值console.log(e.target.value)// 2.提交mutation,調用mutation函數this.$store.commit('changeTitle', e.target.value)}


store/index.js
changeTitle (state, newTitle) {state.title = newTitle}


輔助函數 mapMutations

把位于mutations中的方法提取出來,映射到methods中
在這里插入圖片描述



store/index.js

const store = new Vuex.Store({strict: true,state: {title: 'hhhhh',count: 100},// 通過mutations可以提供修改數據的方法mutations: {subCount (state, n) {state.count -= n},changeTitle (state, newTitle) {state.title = newTitle},changeCount (state, tt) {state.count = tt}} })


Son1.vue

 <button @click="handleSub(10)">- 10</button><button @click="handleSub(20)">- 20</button><button @click="handleSub(30)">- 30</button><!-- 更簡單的寫法,連外面的函數都不套了 --><button @click="subCount(2)">- 2</button><br><button @click="changeTitle('qqq')">改成【qqq】標題</button>...mapMutations(['subCount', 'changeTitle']),handleSub (tt) {this.subCount(tt)},


action (異步

在這里插入圖片描述


輔助函數mapActions

把actions中的方法提取出來,映射到組件methods


( …mapMutations([‘subCount’, ‘changeTitle’]),和 …mapActions([‘changeCountAction’]) 都在methods中
在這里插入圖片描述index.js

//  action 處理異步// 不能直接操作state,操作state還是需要commit mutationactions: {// 此處未分模塊,可當成store倉庫// context.commit('mutation名字',額外參數)changeCountAction (context, num) {// 這里是setTime模擬異步,以后大部分場景是發請求setTimeout(() => {context.commit('changeCount', num)}, 2000)}}

Son2.vue

<button @click="changeCountAction(0)">2秒后改成count=0</button>methods: {changeTitle () {this.$store.commit('changeTitle', 'sssss')},...mapActions(['changeCountAction']) // !!!!}

getters (類似于計算屬性

在這里插入圖片描述

通過store訪問getters

store/index.js

 state: {title: 'hhhhh',count: 100,list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]},//   類似于計算屬性getters: {// 注意點:// 1. 形參第一個參數,就是state// 2. 必須有返回值,返回值就是getters的值filterList (state) {return state.list.filter(item => item > 5)}}


Son1.vue
<hr>
<div>{{$store.state.list}}</div>
<div>{{ $store.getters.filterList }}</div>


通過輔助函數mapGetters映射

Son2.vue

<hr>
<div>{{ filterList }}</div>import {  mapGetters } from 'vuex'computed: {...mapGetters(['filterList'])},


模塊module

在這里插入圖片描述




在這里插入圖片描述store/modules/user.js

const state = {userInfo: {name: 'slx',age: 18},score: 80
}
const mutations = {}
const actions = {}
const getters = {}export default {state,mutations,actions,getters
}


store/modules/setting.js
const state = {theme: 'light'
}
const mutations = {}
const actions = {}
const getters = {}export default {state,mutations,actions,getters
}


store/index.js
import setting from './modules/setting'modules: {user, setting}


使用模塊中的數據 / 模塊中state的訪問語法

在這里插入圖片描述



子模塊的狀態,還是會掛到根級別的state中屬性名就是模塊名
在這里插入圖片描述

直接通過模塊名訪問

Son1.js

    <div>{{ $store.state.user.userInfo.name }}</div>

通過mapState映射

默認根級別的映射 …mapState([‘user’, ‘setting’])

Son2.js

<div>{{ user.userInfo.name }}</div>
<div>{{ setting.theme }}</div>
import { mapState } from 'vuex'computed: {...mapState(['user', 'setting']),},

子模塊映射 mapState(‘模塊名’,['xxx]) +開啟命名空間

user.js

export default {namespaced: true,//開啟命名空間state,mutations,actions,getters
}


Son2.vue

<div>{{ userInfo.name }}</div>
<div>{{ score }}</div>...mapState('user', ['userInfo', 'score']), //! !!!



使用模塊中getters中的數據 / 模塊中getters的訪問語法

直接通過模塊名訪問 $store.getters[‘模塊名/xxx’]

user.js

const getters = {// 分模塊后,state就是子模塊的stateUpperName (state) {return state.userInfo.name.toUpperCase()}
}


Son1.vue

<div>{{ $store.getters['user/UpperName'] }}</div>


通過mapGetters映射

在這里插入圖片描述

默認根級別映射mapGetters([‘xxx’])

Son2.vue

<div>{{ filterList }}</div>...mapGetters(['filterList'])


store/index.js
  getters: {// 注意點:// 1. 形參第一個參數,就是state// 2. 必須有返回值,返回值就是getters的值filterList (state) {return state.list.filter(item => item > 5)}},

子模塊映射mapGetters(‘模塊名’,[‘xxx’])+開啟命名空間Son2.vue

<div>{{ UpperName }}</div>...mapGetters('user', ['UpperName']), //! !!!


掌握模塊中的mutation調用語法

在這里插入圖片描述

直接通過store調用 $store.commit(‘模塊名/xxx’,額外參數)

setting.js

const mutations = {setTheme (state, newtheme) {state.theme = newtheme}
}
export default {namespaced: true,state,mutations,actions,getters
}


Son1.vue

        <div>{{ $store.state.setting.theme }}</div><button @click="changeTheme">改主題色</button>
changeTheme () {this.$store.commit('setting/setTheme', 'dark')},

通過mapMutations映射

默認根級別映射mapMutations([‘xxx’])

子模塊映射mapMutations(‘模塊名’,[‘xxx’])+開啟命名空間

setting.js

const state = {theme: 'light',size: 16
}
const mutations = {setTheme (state, newtheme) {state.theme = newtheme},setSize (state, newSize) {state.size = newSize}
}


Son2.vue

<div>{{$store.state.setting.size}}px</div>
<button @click="setSize(90)">改px</button>//真的注意,放在methods里,不是computedmethods: {...mapMutations('setting', ['setSize']),...mapMutations('setting', ['setTheme'])}


## 模塊中action的訪問語法 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/ae6beb82840640eab8df3c6d8d540061.png)

直接通過模塊名訪問 $store.dispatch(‘模塊名/xxx’,額外參數)

Son1.vue

 <button @click="updateTheme2">一秒后更新</button>
methods: {updateTheme2 () {this.$store.dispatch('setting/setThemeSecond', 'orange')},


setting.js
const actions = {setThemeSecond (context, newTheme) {setTimeout(() => {// 調用mutation  context上下文,默認提交的就是自己模塊action和mutationcontext.commit('setTheme', newTheme)}, 1000)}
}

在這里插入圖片描述

通過mapActions映射

默認根級別映射mapActions([‘xxx’])

子模塊映射mapActions(‘模塊名’,[‘xxx’])+開啟命名空間

Son2.vue

 <button @click="setThemeSecond('black')">一秒后更新主題</button>methods: {...mapActions('setting', ['setThemeSecond'])}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36592.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36592.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36592.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IntelliJ IDEA 2021/2022關閉雙擊shift全局搜索

我這里演示的是修改&#xff0c;刪除是右鍵的時候選擇Remove就好了 IDEA左上角 File-->Settings 找到Navigate -->Search Everywhere &#xff0c;右鍵添加快捷鍵。 OK --> Apply應用

C語言學習之const關鍵字的使用

const修飾變量&#xff1a;const關鍵字修飾變量時&#xff0c;該變量表示是一個只讀變量&#xff0c;不能通過變量名修改變量的值&#xff1b;案例&#xff1a; const int m 20; int const n 30; m 30;//不可以賦值&#xff0c;因為m是只讀變量 n 20;//不可以賦值&#xf…

初始多線程

目錄 認識線程 線程是什么&#xff1a; 線程與進程的區別 Java中的線程和操作系統線程的關系 創建線程 繼承Thread類 實現Runnable接口 其他變形 Thread類及其常見方法 Thread的常見構造方法 Thread類的幾個常見屬性 Thread類常用的方法 啟動一個線程-start() 中斷…

前端食堂技術周刊第 93 期:7 月登陸 Web 平臺的新功能、Node.js 工具箱、Nuxt3 開發技巧、MF 重構方案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;橙橙冰萃美式 食堂技術周刊倉庫地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童歐巴。歡迎來到前端食堂技術周刊&#xff0c;我們先來…

Android多屏幕支持-Android12

Android多屏幕支持-Android12 1、概覽及相關文章2、屏幕窗口配置2.1 配置xml文件2.2 DisplayInfo#uniqueId 屏幕標識2.3 adb查看信息 3、配置文件解析3.1 xml字段讀取3.2 簡要時序圖 4、每屏幕焦點 android12-release 1、概覽及相關文章 AOSP > 文檔 > 心主題 > 多屏…

如何利用DeepBook自動做市商(AMM),發揮應用的最大價值

盡管Sui宣布DeepBook作為其首個本地流動性層&#xff0c;即中央限價單簿&#xff08;Central Limit Order Book&#xff0c;CLOB&#xff09;&#xff0c;但自動做市商&#xff08;Automated Market Maker&#xff0c;AMM&#xff09;平臺也可以在Sui上發揮作用。事實上&#x…

理解jvm之對象已死怎么判斷?

目錄 引用計數算法 什么是引用 可達性分析算法&#xff08;用的最多的&#xff09; 引用計數算法 定義&#xff1a;在對象中添加一個引用計數器&#xff0c;每當有一個地方引用它時&#xff0c;計數器值就加一&#xff1b;當引用失效時&#xff0c;計數器值就減一&#xff1…

文件批量改名高手:輕松刪除文件名,僅保留編號!

您是否經常需要對大量文件進行命名調整&#xff1f;是否為繁瑣的手動操作而感到厭煩&#xff1f;現在&#xff0c;我們的智能批量文件改名工具為您提供了一種簡單而高效的解決方案&#xff01;只需幾步操作&#xff0c;您就能輕松刪除原有的文件名&#xff0c;僅保留編號&#…

YOLO相關原理(文件結構、視頻檢測等)

超參數進化(hyperparameter evolution) 超參數進化是一種使用了genetic algorithm&#xff08;GA&#xff09;遺傳算法進行超參數優化的一種方法。 YOLOv5的文件結構 images文件夾內的文件和labels中的文件存在一一對應關系 激活函數&#xff1a;非線性處理單元 activation f…

c#學習路線

文章目錄 .net coreN層架構大項目實戰高性能互聯網項目架構c#高級編程各種主流框架分布式通信SSO單點登錄+權限管理系統實戰N層架構WEB安全ASP.NET MVCNoSQLORM框架c#6和c#7新語法VS插件分享項目管理三層項目實戰三層架構ASP.NET基礎數據庫和ASP.NETADO.NET計算機基礎計算機硬件…

C# 11 中的新增功能

本文內容 泛型屬性泛型數學支持數值 IntPtr 和 UIntPtr字符串內插中的換行符 顯示另外 11 個 C# 11 中增加了以下功能&#xff1a; 原始字符串字面量泛型數學支持泛型屬性UTF-8 字符串字面量字符串內插表達式中的換行符列表模式文件本地類型必需的成員自動默認結構常量 str…

【設計模式】MVC 模式

MVC 模式代表 Model-View-Controller&#xff08;模型-視圖-控制器&#xff09; 模式。這種模式用于應用程序的分層開發。 Model&#xff08;模型&#xff09; - 模型代表一個存取數據的對象或 JAVA POJO。它也可以帶有邏輯&#xff0c;在數據變化時更新控制器。View&#xff…

Linux6.37 Kubernetes 集群調度

文章目錄 計算機系統5G云計算第三章 LINUX Kubernetes 集群調度一、調度約束1.調度過程2.指定調度節點3.親和性1&#xff09;節點親和性2&#xff09;Pod 親和性3&#xff09;鍵值運算關系 4.污點(Taint) 和 容忍(Tolerations)1&#xff09;污點(Taint)2&#xff09;容忍(Toler…

centos搭建k8s

centos搭建k8s環境_centos k8s_進擊的Coders的博客-CSDN博客

VSCODE[配置ssh免密遠程登錄]

配置ssh免密遠程登錄 本文摘錄于&#xff1a;https://blog.csdn.net/qq_44571245/article/details/123031276只是做學習備份之用&#xff0c;絕無抄襲之意&#xff0c;有疑惑請聯系本人&#xff01; 這里要注意如下幾個地方: 1.要進入.ssh目錄創建文件: 2.是拷貝帶"ssh-…

微服務系列文章之 Springboot+Vue實現登錄注冊

一、springBoot 創建springBoot項目 分為三個包&#xff0c;分別為controller&#xff0c;service&#xff0c; dao以及resource目錄下的xml文件。 UserController.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 …

如何利用 EMC 模型解決能源服務提供商的瓶頸

01. 什么是合同能源管理&#xff1f; 合同能源管理(EMC-Energy Management Contract) 是一種新型的市場化節能機制,其實質就是以減少的能源費用來支付節能項目全部成本的節能投資方式。&#xff1a;節能服務公司與用能單位以契約形式約定節能項目的節能目標&#xff0c;節能服…

(二)Node.js 基礎模塊

&#xff08;二&#xff09;Node.js 基礎模塊 1. fs文件系統模塊1.1 什么是fs文件系統模塊1.2 讀取指定文件中的內容1. fs.readFile()的語法格式2. fs.readFile()的示例代碼 1.3 向指定的文件中寫入內容1. fs.writeFile()的語法格式2. fs.writeFile()的實例代碼 1.4 __dirname …

正則表達式的使用

1、正則表達式-教程 正則表達式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之間的字母&#xff09;和特殊字符&#xff08;稱為元字符&#xff09;。 正則表達式使用單個字符串來描述&#xff0c;匹配一系列匹配某個句法規則的字符串。 2、…

《論文閱讀13》Efficient Urban-scale Point Clouds Segmentationwith BEV Projection

一、論文 研究領域&#xff1a; 城市級3D語義分割論文&#xff1a;Efficient Urban-scale Point Clouds Segmentationwith BEV Projection清華大學&#xff0c;新疆大學2021.9.19論文github論文鏈接 二、論文概要 2.1主要思路 提出了城市級3D語義分割新的方法&#xff0c;將…