Vuex 基本概念

參照官網整理總結vuex語法。

計劃日期:
Vuex基礎部分:2022年2月20日——2022年2月28日
Vuex源碼相關實踐:待定
Vuex拓展:待定
寫完后,會發到倉庫地址:待定

Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式

  • state,驅動應用的數據源;
  • view,以聲明方式將 state 映射到視圖;
  • actions,響應在 view 上的用戶輸入導致的狀態變化。
vuex-16454369395901.png

store——包含以上概念的容器

view——以聲明方式將 state 映射到視圖

state 狀態、數據

getters:當state的數據變更時,getters的值也發生變化(相當于vuex中state的計算屬性)

mutations 更改狀態的函數

actions 異步操作

Modules 模塊。為了將store的狀態進行分割,每個模塊都有屬于自己的state、mutation、action、getter

Vuex V3.0

基礎代碼:

import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
Vue.use(Vuex)//使用vuex
// 將 store 實例作為插件安裝
const store = new Vuex.Store({/*狀態、數據 存儲 */state: {count: 0},/* 行為,更改狀態的函數  */mutations: {increment(state) {state.count++}}
})
new Vue({router,store,// 把 store 對象提供給 “store” 選項,這可以把 store 的實例注入所有的子組件render: function (h) {return h(App)}
}).$mount('#app')

state——狀態、數據

狀態、數據 **單一狀態樹 **作為一個“唯一數據源 (SSOT (opens new window))”而存在。

操作:
讀取state中數據
this.$store.state.count
變更state中的數據
//使用commit調用mutations內的increment方法
this.$store.commit("increment")
mapState輔助函數
計算屬性顯示數據

作用:當獲取多個狀態減少申明多個狀態的重復和冗余,使用輔助函數來生成計算屬性。

main.js

import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
// 將 store 實例作為插件安裝
Vue.use(Vuex)
const store = new Vuex.Store({/*狀態、數據 存儲 */state: {count: 0,c: 1,},/* 行為,更改狀態的函數  */mutations: {increment(state) {state.count++}}
})
new Vue({router,store,render: function (h) {return h(App)}
}).$mount('#app')

home.vue

<template><div>首頁<p>{{ count }}</p><p>{{ countPlusLocalState }}</p><p>{{ countAlias }}</p></div>
</template>
<script>
import { mapState } from "vuex";
export default {//import引入的組件需要注入到對象中才能使用components: {},data() {//這里存放數據return {localCount: 123,};},//監聽屬性 類似于data概念computed: mapState({// 箭頭函數可使代碼更簡練count: (state) => state.count,// 傳字符串參數 'count' 等同于 `state => state.count`countAlias: "count",// 為了能夠使用 `this` 獲取局部狀態,必須使用常規函數countPlusLocalState(state) {return state.count + this.localCount;},}),// computed: mapState(["count"]),//監控data中的數據變化watch: {},//方法集合methods: {increment() {/* 獲取state內的數據值 */this.$store.commit("increment");console.log(this.$store.state.count);},},
};
</script>
image-20220220161503081.png
簡寫形式

當計算屬性名稱和state的數據名稱相同可以簡寫成數組形式

computed: mapState(["count"]),

頁面內調用:

{{count}}
image-20220220161704874.png
展開mapstate對象方便調用
<template><div>首頁<p>{{ count }}</p><p>{{ c }}</p><!-- <p>{{ countPlusLocalState }}</p> --><!-- <p>{{ countAlias }}</p> --></div>
</template>
<script>
computed: {//寫法1...mapState(["count", "c"]),//寫法2...mapState({count: "count",c: "c",}),
},
</script>

Getter——store內的計算屬性

當state內的數據變化后,getter內的數據也隨之變化

屬性訪問

Getter(state,getters)

state——(必填)返回state狀態數據內的值

示例:`state.count++`

getters——(可選)調用getters內的方法

示例:`getters.todolist.length`

完整示例:

vuex書寫:

const store = new Vuex.Store({/*狀態、數據 存儲 */state: {/* state練習 */count: 0,c: 1,/* getters練習 */todos: [{ id: 1, text: '...', done: true },{ id: 2, text: '...', done: false }]},/* 行為,更改狀態的函數  */mutations: {/* state練習 */increment(state) {state.count++}},getters: {doneTodos: (state) => {// 返回todo.done為true的列表項return state.todos.filter(todo => todo.done)},// 返回完整的列表todolist: (state) => {return state.todos;},// 接受其他getters作為第2個參數doneTodosCount(state, getters) {console.log(getters.todolist)return getters.todolist.length}}
})

vue頁面顯示數據

<template><div>首頁<p>為true的列表:{{ doneTodos }}</p><p>完整的列表項:{{ todolist }}</p><p>完整的列表長度:{{ doneTodosCount }}</p></div>
</template>
<script>export default {computed: {// 返回todos列表doneTodos() {return this.$store.getters.doneTodos;},todolist() {return this.$store.getters.todolist;},// 返回列表長度doneTodosCount() {return this.$store.getters.doneTodosCount;},},}
</script>

結果顯示:

image-20220221171937666.png
方法訪問

通過給getters方法傳遞參數,從而實現返回想要的數據內容

vuex

  /*狀態、數據 存儲 */
state: {//.../* getters練習 */todos: [{ id: 1, text: '...', done: true },{ id: 2, text: '...', done: false }]
},  
getters: {//...//給getters方法傳遞參數getTodoById: (state) => (id) => {return state.todos.find(todo => todo.id === id)}
}

調用

<template><div><h3>通過方法訪問</h3><p>返回指定id的列表項:{{ gettodo(2) }}</p></div>
</template>
<script>//需要寫在methods方法內,前面寫在computed計算屬性內methods: {/* 返回指定id的列表項 */gettodo(id) {return this.$store.getters.getTodoById(id);},//...},
</script>

輸出:

image-20220221172922503.png
mapGetters輔助函數

注:只能映射到計算屬性中,無法映射到方法中

寫法與mapState類似

原本寫法:

  computed: {// 返回todos列表doneTodos() {return this.$store.getters.doneTodos;},todolist() {return this.$store.getters.todolist;},// 返回列表長度doneTodosCount() {return this.$store.getters.doneTodosCount;},},

使用mapGetter寫法:

寫法1

import { mapGetter } from "vuex";computed: {...mapGetters(["doneTodos", "todolist", "doneTodosCount"]),},

寫法2

import { mapGetters } from "vuex";computed: {...mapGetters({doneTodos: "doneTodos",todolist: "todolist",doneTodosCount: "doneTodosCount",}),},

輸出結果:

image-20220221173855234.png

mutations——更改state狀態的函數

Vuex 的 store 中的狀態的唯一方法是提交 mutation

基本格式:

type(state,mutation)

  • type:(事件類型)——命名在mutations中的函數名稱

    示例:

      increment (state, n) {state.count += n}
    

    increment 為事件類型

  • state:【必選】(數據)——store中存儲的數據

  • mutation:【可選】(荷載)——調用事件類型時傳遞給事件的參數。

    示例:store.commit('increment', 10) 最后的10為參數事件類型為increment

完整示例:

store

const store = new Vuex.Store({/*狀態、數據 存儲 */state: {//.../* mutation練習 */mut: 1},/* 行為,更改狀態的函數  */mutations: {//.../* mutation練習 */incrementdata(state, n) {state.mut += n.sum}},getters: {}
})

mutation.vue

<template><div class="">mutation獲取值:{{ mudata }}</div>
</template>
<script>
export default {components: {},data() {return {mudata: "",};},methods: {runmutation() {this.$store.commit({type: "incrementdata",sum: 1,});console.log(this.$store.state);this.mudata = this.$store.state.mut;},},mounted() {this.runmutation();},
};
</script>

結果:


image-20220222225315304.png

Mutation 必須是同步函數,異步的話導致事件無法追蹤(原因在于mutation直接變更的是State(狀態)內的數據)

mapMutations 輔助函數

mapGettersmapState類似

import { mapMutations } from 'vuex'export default {// ...methods: {...mapMutations(['increment', // 將 `this.increment()` 映射為 `this.$store.commit('increment')`// `mapMutations` 也支持載荷:'incrementBy' // 將 `this.incrementBy(amount)` 映射為 `this.$store.commit('incrementBy', amount)`]),...mapMutations({add: 'increment' // 將 `this.add()` 映射為 `this.$store.commit('increment')`})}
}
使用常量替代 Mutation 事件類型
const SOME_MUTATION = 'SOME_MUTATION'
import { createStore } from 'vuex'const store = createStore({state: { ... },mutations: {// 我們可以使用 ES2015 風格的計算屬性命名功能來使用一個常量作為函數名[SOME_MUTATION] (state) {// 修改 state}}
})

示例:

const CHANGE_NAME = 'CHANGE_NAME'
mutations: {[CHANGE_NAME](state, data) {state.name = data}
},

Action 行為

參數概要

目的是為了處理mutation中的異步操作,原因在于,action提交的是mutation,而mutation直接變更的是state(狀態數據)內的值

  • Action 提交的是 mutation,而不是直接變更狀態。
  • Action 可以包含任意異步操作。

接收1個參數

第一個參數 返回store內所有的對象(所以可以用解構賦值的方式獲取指定store內的對象)

打印increment (context) context的數據結果

image-20220223153726896.png

寫法1.

  actions: {increment (context) {setTimeout(() => {context.commit('increment')}, 1000)}}

寫法2.

actions: {incrementAsync ({ commit }) {setTimeout(() => {commit('increment')}, 1000)}
}
調用action
store.dispatch('increment')
異步調用action
actions: {incrementAsync ({ commit }) {setTimeout(() => {commit('increment')}, 1000)}
}
載荷形式分發(同mutation)
// 以載荷形式分發
store.dispatch('incrementAsync', {amount: 10
})// 以對象形式分發
store.dispatch({type: 'incrementAsync',amount: 10
})
mapActions調用方式
import { mapActions } from 'vuex'export default {// ...methods: {...mapActions(['increment', // 將 `this.increment()` 映射為 `this.$store.dispatch('increment')`// `mapActions` 也支持載荷:'incrementBy' // 將 `this.incrementBy(amount)` 映射為 `this.$store.dispatch('incrementBy', amount)`]),...mapActions({add: 'increment' // 將 `this.add()` 映射為 `this.$store.dispatch('increment')`})}
}
組合Action(同時觸發多個action)
state: {//.../* action練習 */act: 1,
},
mutations: {//.../* action練習 */action(state) {console.log(state.act)state.act++console.log('返回存儲的值:' + state.act)}
},  
actions: {//...action(context) {console.log(context);context.commit('action')},/* action異步分發 */actionA(con) {return new Promise((resolve, reject) => {setTimeout(function () {con.commit('action')console.log('actionA:' + con.state.act)resolve()}, 1000)})},actionB(con) {// 異步的形式調用2次actionreturn con.dispatch('actionA').then(() => {con.commit('action')console.log('actionB:' + con.state.act)})},/* async await包裹異步函數寫法 */async actionA(con) {// commit觸發mutations中的action行為導致act+1,//dispatch調用action中的action,再次觸發了mutations中的action行為導致act+1,con.commit('action', await con.dispatch('action'))//相當于異步+2console.log('actionB調用=>A:' + con.state.act);//3},async actionB(con) {await con.dispatch('actionA');//3}}

界面內調用:

this.$store.dispatch("actionB");
image-20220223171202724.png

用async await 寫成同步形式

    /* async await包裹異步函數寫法 */async actionA(con) {// commit觸發mutations中的action行為導致act+1,//dispatch調用action中的action,再次觸發了mutations中的action行為導致act+1,con.commit('action', await con.dispatch('action'))//相當于異步+2console.log('actionB調用=>A:' + con.state.act);//3},async actionB(con) {await con.dispatch('actionA');//3}
image-20220223171237219.png

module 模塊分割

Vuex 允許我們將 store 分割成模塊(module)

多模塊注冊及基本使用

思路分別寫2個goods和users2個不同的模塊,最后注冊引入到實例中

完整的store對象【全部代碼】

/* 用module之后 */
const store = new Vuex.Store({/* 全局狀態 */state: {name: 'ccc'},/* 全局狀態變更 */mutations: {},/* 全局行為 */actions: {},/* 全局狀態返回類似計算屬性 */getters: {},modules: {goods,// users,//注冊模塊的方式進行注冊/* 多模塊公用 */goodslist: {namespaced: true,//開啟命名空間/* 公用相同的模型 */modules: {goods1: goods,goods2: goods,}}}
})

goods模型

const goods = {namespaced: true,// 普通的純對象形式申明,這個狀態對象會通過引用被共享,則當多模型共用的時候數據也會發生改變【模型重用】// state: {//     name: '默認goods',// },// 函數形式每個模型都是單獨不會同時改變【模型重用】state() {return {name: '默認goods',}},// 更改狀態mutations: {GOODS(state, data) {state.name = data}},// 行為actions: {change_name(state, data) {state.commit('GOODS', data)}},// 計算屬性getters: {getname: (state) => {return state.name + ' ' + state.name}},}
export default goods;

users模型

const users = {namespaced: true,state: {name: '默認users',},// 更改狀態mutations: {[CHANGE_NAME](state, data) {state.name = data}},// 行為actions: {change_name(state, data) {state.dispatch('CHANGE_NAME', data)}},// 計算屬性getters: {getname: (state) => {return state.name}},}
export default users;

界面調用module.vue

<template><div class=""><h2>模型1:goods</h2><p>當前名稱:{{ goods }}</p><p>getter獲取的當前名稱:{{ getname }}</p>商品名稱:<input type="text" v-model="goodsname" /><input type="button" @click="changegoodsname" value="修改商品名稱" /><h2>多模型共用</h2><p>goods模型1 name值:{{ goodslist1 }}</p><p>goods模型2 name值:{{ goodslist2 }}</p><h3>注冊嵌套模塊</h3><p>goods模型3 name值:{{ goodslist3 }}</p><h2>模型2:users</h2><p>當前的名稱:{{ users }}</p></div>
</template>
<script>
import { mapGetters, mapState, mapActions, mapMutations } from "vuex";
export default {//import引入的組件需要注入到對象中才能使用components: {},data() {//這里存放數據return { goodsname: "123" };},//監聽屬性 類似于data概念computed: {...mapState({goods: (state) => {return state.goods.name;},users: (state) => {return state.users.name;},goodslist1: (state) => {return state.goodslist.goods1.name;},goodslist2: (state) => {return state.goodslist.goods2.name;},goodslist3: (state) => {return state.goodslist.goods2.name;},}),...mapGetters("goods", {getname: "getname",}),},//監控data中的數據變化watch: {},//方法集合methods: {/* 用mutation同步修改值 */// ...mapMutations("goods", {//   changegoods: "GOODS",// }),/* 用action異步修改值 */...mapActions("goods", {actionchangegoods: "change_name",}),changegoodsname() {// this.changegoods(this.goodsname);this.actionchangegoods(this.goodsname);},},//生命周期 - 創建完成(可以訪問當前this實例)created() {},//生命周期 - 掛載完成(可以訪問DOM元素)mounted() {},
};
</script>
模塊動態注冊【保留state】
// 注冊模塊 `myModule`
//{ preserveState: true }使模塊中的state無法被覆寫,保持原樣【保留原始state】,注冊的模塊state無法寫入
store.registerModule('users', users, { preserveState: false })
// 注冊嵌套模塊 `goodslist/myModule`(前面的goodslist必須存在的情況下才能進行嵌套)
store.registerModule(['goodslist', 'goods3'], goods, { preserveState: false })
模塊重用

前面完整代碼中的一部分goods1和goods2模塊重用的方式寫入

goods3注冊模塊的方式寫入。用的也是同一個模塊

/* 用module之后 */
const store = new Vuex.Store({//...modules: {goods,// users,//注冊模塊的方式進行注冊/* 多模塊公用 */goodslist: {namespaced: true,//開啟命名空間/* 公用相同的模型 */modules: {goods1: goods,goods2: goods,}}}//...
})
// 注冊嵌套模塊 `goodslist/myModule`(前面的goodslist必須存在的情況下才能進行嵌套)
store.registerModule(['goodslist', 'goods3'], goods, { preserveState: false })
結果展示

點擊按鈕,修改上方商品名稱內容

image-20220225105654561.png

在線鏈接【需翻墻】https://codesandbox.io/s/wonderful-night-ew7uj2?file=/src/views/module1.vue

Vuex V4.0

State(不變)

Getter(不變)

最后編輯于:2025-06-15 10:07:22


喜歡的朋友記得點贊、收藏、關注哦!!!

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

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

相關文章

深入理解Linux文件操作:stdin/stdout/stderr與C語言文件函數全解析

目錄 一、stdin、stdout 和 stderr 詳解 二、文件打開方式 三、C語言文件操作函數詳解 1、文件操作概述 2、文件操作函數分類表 1. 文件打開與關閉 2. 字符讀寫函數 3. 字符串讀寫函數 4. 格式化讀寫函數 5. 二進制讀寫函數 6. 文件定位函數 7. 文件狀態與錯誤檢測…

【自用】JavaSE--集合框架(一)--Collection集合體系

概述之前學的ArrayList就是集合的一種&#xff0c;是一種容器&#xff0c;可以往里面存東西&#xff0c;大小可變Collection集合體系Collection的常用方法以后Collection體系的集合都可以用下圖的方法注意toArray方法的數組類型是Object&#xff0c;這樣就可以接收任意類型的數…

電腦視頻常用幾種接口

傳輸信號類型 DP&#xff08;DisplayPort&#xff09;主要用于傳輸數字視頻和音頻信號&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同樣傳輸數字音視頻信號&#xff0c;但更偏向消費電子領域&#xff0c;如電視、游…

CherryStudio+playwright-mcp-server實現AI自動化

目錄 1、CherryStudio安裝與配置 1.1什么是CherryStudio 1.2安裝 1.3配置 2、playwright-mcp-server的安裝與配置 3、執行測試與結果 1、CherryStudio安裝與配置 1.1什么是CherryStudio Cherry Studio 是一款集多模型對話、知識庫管理、AI 繪畫、翻譯等功能于一體的全能 …

深入了解 find_element 方法:Web 自動化定位元素的核心?

在 Web 自動化測試領域&#xff0c;元素定位是實現各類操作的基礎&#xff0c;而find_element方法正是 Selenium 等自動化工具中用于定位單個元素的核心方法。掌握它的使用技巧&#xff0c;能讓我們更精準、高效地操控網頁元素&#xff0c;為自動化測試腳本的編寫打下堅實基礎。…

從零開始的云計算生活——第三十三天,關山阻隔,ELK日志分析

目錄 一.故事背景 二、Elasticsearch 全面概述 1、核心定位 2、核心特性 a. 分布式架構 b. 高性能原理 c. 數據模型創新 3、核心技術組件 4、核心應用場景 a. 企業級搜索 b. 可觀測性 c. 安全分析&#xff08;SIEM&#xff09; 5、版本演進關鍵特性 6、核心優勢…

深入理解 Spring Boot Starter 的生成機制

在使用 Spring Boot 進行開發時&#xff0c;我們常常會引入諸如 spring-boot-starter-web、spring-boot-starter-data-jpa 等依賴&#xff0c;從而快速開啟相關功能模塊。但你是否思考過這些 Starter 是如何構建的&#xff1f;如果我們要開發自己的 Starter&#xff0c;又該如何…

阿里云-通義靈碼:隱私保護機制—為數據安全筑起銅墻鐵壁

免責聲明&#xff1a;此篇文章所有內容皆是本人實驗&#xff0c;并非廣告推廣&#xff0c;并非抄襲&#xff0c;該系列繼續~每日一句不要感嘆自己的平凡&#xff0c;即便是最暗的星星&#xff0c;相與無邊的黑暗已是耀眼。一.引言在這個數據如同空氣般滲透到生活每個角落的時代…

最小生成樹算法詳解

最小生成樹算法詳解一、最小生成樹基礎概念1.1 生成樹與最小生成樹1.2 核心性質1.3 應用場景二、Prim 算法&#xff1a;從頂點出發的“生長式”構建2.1 算法原理2.2 Java 代碼實現&#xff08;鄰接矩陣版&#xff09;2.3 復雜度分析三、Kruskal 算法&#xff1a;按邊權排序的“…

YOLO 目標檢測的改進方法

YOLO目標檢測的改進方法可以從模型架構、訓練策略、損失函數等多個方面入手&#xff0c;以下是一些常見的改進方法方向及參考文獻&#xff1a; 模型架構改進 骨干網絡替換&#xff1a;使用更輕量或更強大的網絡替換原始骨干網絡。輕量級網絡如MobileNetV3、ShuffleNetV2等適合…

C++ 程序 AddressSanitizer:DEADLYSIGNAL

GCC && G 操作系統&#xff1a;Ubuntu 22.04 現象&#xff1a;C程序編譯時開啟ASAN&#xff0c;運行時有幾率會出現大量AddressSanitizer:DEADLYSIGNAL 參考文章&#xff1a; https://stackoverflow.com/questions/77894856/possible-bug-in-gcc-sanitizers https://st…

【強化學習】實際部署

環境 Gymnasium 作為環境接口&#xff0c; PyBullet作為物理仿真平臺&#xff0c; Stable Baselines3 用于訓練算法。 測試框架搭建 以pybullet自帶的Cart-pole-v1為例 安裝依賴&#xff1a;確保安裝了 Gymnasium 和 SB3 ( pip install gymnasium stable-baselines3 ).初始化環…

集訓Demo4

創建數據庫創建項目基本和視頻中的一樣我給User添加了vip這個屬性&#xff0c;想實現兩個令牌通過訪問的案例&#xff0c;但遇到了問題一個令牌是密碼加用戶名的map數組這是它的獲取、驗證邏輯獲取驗證另一個令牌是Int vip這是自己寫的另一套密鑰和方法獲取但在驗證這里有問題頭…

深度優化:Java 慢查詢排查與性能調優實戰

文章目錄&#x1f680; 深度優化&#xff1a;Java 慢查詢排查與性能調優實戰&#x1f6a8;1. 事故全景&#xff1a;從告警到定位&#x1f575;??♂?1.1 事故時間線&#x1f4ca; 1.2 關鍵指標異常&#x1f6e0;? 1.3 排查工具鏈&#x1f50d; 2. 深度剖析&#xff1a;MySQL…

TF-IDF(Term Frequency - Inverse Document Frequency)

TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09;是一種在信息檢索與文本挖掘中非常常用的關鍵詞提取方法&#xff0c;用于衡量一個詞在文檔集合中的重要性。它的核心思想是&#xff1a;如果一個詞在某個文檔中出現得頻繁&#xff0c;同時在其他文檔…

Chrome緊急更新,谷歌修復正遭活躍利用的關鍵零日漏洞

谷歌已針對桌面版Chrome發布重要穩定渠道更新&#xff08;版本138.0.7204.157/.158&#xff09;&#xff0c;修復了六個安全漏洞&#xff0c;其中包括一個已被實際利用的漏洞。該更新正在向Windows、Mac和Linux平臺推送&#xff0c;預計未來數日或數周內將通過自動更新完成部署…

Typecho插件開發:實現文章字數統計與閱讀時長計算功能

文章目錄 Typecho文章字數統計與閱讀時長計算功能實現指南 1. 功能背景與需求分析 2. 插件設計與實現 2.1 插件基礎結構 2.2 插件主邏輯實現 2.3 代碼解析與優化 3. 前端展示優化 3.1 CSS樣式增強 3.2 多語言支持 4. 高級功能擴展 4.1 數據庫表優化 4.2 定時批量處理歷史文章 5…

開源短鏈接工具 Sink 無需服務器 輕松部署到 Workers / Pages

本文首發于只抄博客,歡迎點擊原文鏈接了解更多內容。 前言 Sink 是一款開源免費的短鏈接生成工具,支持自定義短鏈接 Slug 以及設置到期時間,并且還可以借助 Cloudflare 的 Analytics Engine 功能分析短鏈接的統計數據。 最重要的是實現以上這些功能并不需要有自己的服務器,…

嵌入式數據結構之順序表總結

以下是為嵌入式面試準備的順序表全面優化指南&#xff0c;結合高頻考點、代碼規范與嵌入式專項優化技巧&#xff0c;助你系統掌握該知識點。 一、順序表基礎與嵌入式特點 ?本質? 用連續內存空間存儲線性表元素&#xff0c;通過下標實現O(1)隨機訪問 。 ?嵌入式優勢?&#x…

Pytorch下載Mnist手寫數據識別訓練數據集的代碼詳解

datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransforms.ToTensor())1. datasets.MNIST這是torchvision.datasets模塊中的一個類&#xff0c;專門用于加載MNIST數據集。MNIST是一個著名的手寫數字識別數據集&#xff0c;包含60,000個訓練樣本和10,000個測試…