Vuex使用指南:状态管理
一、什么是状态管理?为什么需要 Vuex?
1. 状态管理的基本概念
在 Vue 应用中,状态指的是应用中的数据。例如:
- 用户登录状态
- 购物车中的商品
- 文章列表的分页信息
状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。
2. 为什么需要 Vuex?
在小型应用中,我们可以通过 props 和 events 实现组件间通信。但在中大型应用中,这种方式会面临以下问题:
- 多层级组件通信复杂:跨级组件通信需要通过中间组件层层传递
- 状态共享困难:多个不相关组件需要共享同一状态时,代码会变得混乱
- 状态变化不可追踪:数据流向不清晰,调试困难
Vuex 通过集中式存储应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,解决了上述问题。
二、Vuex 核心概念
Vuex 的核心由以下几个部分组成:
1. State:应用状态的单一数据源
State 是存储应用状态的对象,类似于组件中的 data
。但与组件的 data
不同的是,Vuex 的 state 是全局共享的。
// store.js
const store = createStore({state: {count: 0,user: null,cartItems: []}
})
组件可以通过 this.$store.state
访问这些状态:
<template><div><p>Count: {{ $store.state.count }}</p></div>
</template>
2. Getters:类似于计算属性,获取派生状态
Getters 用于获取 state 经过处理后的值,类似于组件中的计算属性。
// store.js
const store = createStore({state: {todos: [{ id: 1, text: 'Learn Vuex', completed: true },{ id: 2, text: 'Build an app', completed: false }]},getters: {completedTodos(state) {return state.todos.filter(todo => todo.completed);}}
})
组件中使用:
<template><div><p>Completed todos: {{ $store.getters.completedTodos.length }}</p></div>
</template>
3. Mutations:更改 state 的唯一方法
Mutations 是唯一可以修改 state 的地方,并且必须是同步的。
// store.js
const store = createStore({state: {count: 0},mutations: {increment(state) {state.count++;},incrementBy(state, payload) {state.count += payload;}}
})
组件中通过 commit
触发 mutation:
<script>
export default {methods: {handleIncrement() {this.$store.commit('increment'); // 触发 increment mutationthis.$store.commit('incrementBy', 5); // 传递参数}}
}
</script>
4. Actions:处理异步操作
Actions 用于处理异步操作(如 API 请求),完成后通过 commit
提交 mutation。
// store.js
const store = createStore({state: {user: null,loading: false},mutations: {SET_USER(state, user) {state.user = user;},SET_LOADING(state, loading) {state.loading = loading;}},actions: {async fetchUser({ commit }) {commit('SET_LOADING', true);try {const response = await fetch('/api/user');const user = await response.json();commit('SET_USER', user);} catch (error) {console.error('Failed to fetch user', error);} finally {commit('SET_LOADING', false);}}}
})
组件中通过 dispatch
触发 action:
<script>
export default {methods: {async loadUser() {await this.$store.dispatch('fetchUser');}}
}
</script>
5. Modules:模块化管理大型应用
当应用变得复杂时,可以将 store 分割成多个模块,每个模块有自己的 state、mutations、actions 和 getters。
// store/modules/cart.js
export default {namespaced: true, // 启用命名空间state: {items: []},mutations: {ADD_ITEM(state, item) {state.items.push(item);}},actions: {addToCart({ commit }, item) {commit('ADD_ITEM', item);}},getters: {itemCount(state) {return state.items.length;}}
}
在根 store 中注册模块:
// store/index.js
import { createStore } from 'vuex'
import cart from './modules/cart'
import user from './modules/user'export default createStore({modules: {cart,user}
})
三、Vuex 工作流程:单向数据流
Vuex 采用单向数据流的设计理念,所有状态变更都遵循固定的流程:
- 视图触发 Action:组件通过
dispatch
触发 action - Action 处理异步逻辑:如 API 请求、定时器等
- Action 提交 Mutation:完成后通过
commit
提交 mutation - Mutation 修改 State:mutation 是唯一允许修改 state 的地方
- State 变化触发视图更新:Vue 的响应式系统会自动更新所有依赖该 state 的组件
组件(dispatch) → Action(commit) → Mutation(modify) → State → 组件更新
四、实战案例:使用 Vuex 构建购物车应用
下面通过一个简单的购物车应用来演示 Vuex 的实际应用。
实现效果:
1. 项目结构
src/├── store/│ ├── index.js # 根 store│ └── modules/│ └── cart.js # 购物车模块├── components/│ ├── ProductList.vue # 商品列表│ ├── Cart.vue # 购物车│ └── Navbar.vue # 导航栏└── App.vue
2. 创建购物车模块
// store/modules/cart.js
export default {// 设置命名空间,以便在多个模块中避免状态、getters、mutations和actions的命名冲突namespaced: true,// 定义模块的状态state: {// 购物车中的商品项items: []},// 定义获取状态的getter函数getters: {// 计算购物车中的商品数量itemCount: state => state.items.length,// 计算购物车中商品的总价totalPrice: state => {return state.items.reduce((total, item) => {return total + item.price * item.quantity;}, 0);}},// 定义直接修改状态的mutation函数mutations: {// 添加商品到购物车ADD_ITEM(state, product) {// 查找购物车中是否已存在该商品const existingItem = state.items.find(item => item.id === product.id);if (existingItem) {// 如果存在,增加该商品的数量existingItem.quantity++;} else {// 如果不存在,将该商品添加到购物车中,并设置数量为1state.items.push({ ...product, quantity: 1 });}},// 从购物车中移除商品REMOVE_ITEM(state, productId) {// 过滤掉要移除的商品state.items = state.items.filter(item => item.id !== productId);},// 清空购物车CLEAR_CART(state) {// 将购物车中的商品项设置为空数组state.items = [];}},// 定义异步操作和提交mutation的action函数actions: {// 将商品添加到购物车的actionaddToCart({ commit }, product) {// 提交ADD_ITEM的mutationcommit('ADD_ITEM', product);},// 从购物车中移除商品的actionremoveFromCart({ commit }, productId) {// 提交REMOVE_ITEM的mutationcommit('REMOVE_ITEM', productId);},// 清空购物车的actionclearCart({ commit }) {// 提交CLEAR_CART的mutationcommit('CLEAR_CART');}}
};
3. 注册模块到根 store
// store/index.js
import { createStore } from 'vuex';
import cart from './modules/cart';export default createStore({modules: {cart}
});
4. 创建商品列表组件
<!-- components/ProductList.vue -->
<template><div class="product-list"><h2>商品列表</h2><div class="products"><div v-for="product in products" :key="product.id" class="product"><img :src="product.image" alt="Product" /><h3>{{ product.name }}</h3><p>{{ product.price }} 元</p><button @click="addToCart(product)">加入购物车</button></div></div></div>
</template><script>
export default {data() {return {products: [{ id: 1, name: 'iPhone 13', price: 6999, image: 'https://picsum.photos/200/300?random=1' },{ id: 2, name: 'MacBook Air', price: 9999, image: 'https://picsum.photos/200/300?random=2' },{ id: 3, name: 'iPad Pro', price: 7999, image: 'https://picsum.photos/200/300?random=3' }]};},methods: {addToCart(product) {this.$store.dispatch('cart/addToCart', product);alert(`${product.name} 已添加到购物车`);}}
};
</script>
5. 创建购物车组件
<!-- components/Cart.vue -->
<template><div class="cart"><h2>购物车</h2><div v-if="cartItems.length === 0" class="empty-cart">购物车为空</div><div v-else><ul><li v-for="item in cartItems" :key="item.id" class="cart-item"><img :src="item.image" alt="Product" /><div class="item-info"><h3>{{ item.name }}</h3><p>{{ item.price }} 元 x {{ item.quantity }}</p><button @click="removeFromCart(item.id)">移除</button></div></li></ul><div class="cart-summary"><p>总计: {{ totalPrice }} 元</p><button @click="clearCart">清空购物车</button></div></div></div>
</template><script>
export default {computed: {cartItems() {return this.$store.state.cart.items;},totalPrice() {return this.$store.getters['cart/totalPrice'];}},methods: {removeFromCart(productId) {this.$store.dispatch('cart/removeFromCart', productId);},clearCart() {this.$store.dispatch('cart/clearCart');}}
};
</script>
6. 创建导航栏组件(显示购物车数量)
<!-- components/Navbar.vue -->
<template><nav class="navbar"><div class="container"><a href="#" class="brand">Vuex 购物车</a><div class="cart-icon"><i class="fas fa-shopping-cart"></i><span class="cart-count">{{ cartItemCount }}</span></div></div></nav>
</template><script>
export default {computed: {cartItemCount() {return this.$store.getters['cart/itemCount'];}}
};
</script>
7. 在 App.vue 中组合所有组件
<!-- App.vue -->
<template><div id="app"><Navbar /><div class="container"><ProductList /><Cart /></div></div>
</template><script>
import Navbar from './components/Navbar.vue';
import ProductList from './components/ProductList.vue';
import Cart from './components/Cart.vue';export default {components: {Navbar,ProductList,Cart}
};
</script><style>
/* 全局样式 */
body {font-family: Arial, sans-serif;margin: 0;padding: 0;
}.container {max-width: 1200px;margin: 0 auto;padding: 20px;
}.navbar {background-color: #333;color: white;padding: 10px 0;
}.navbar .container {display: flex;justify-content: space-between;align-items: center;
}.brand {font-size: 24px;text-decoration: none;color: white;
}.cart-icon {position: relative;cursor: pointer;
}.cart-count {position: absolute;top: -10px;right: -10px;background-color: red;color: white;border-radius: 50%;width: 20px;height: 20px;display: flex;justify-content: center;align-items: center;font-size: 12px;
}.product-list {margin-bottom: 40px;
}.products {display: grid;grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));gap: 20px;
}.product {border: 1px solid #ddd;padding: 15px;border-radius: 5px;text-align: center;
}.product img {max-width: 100%;height: 200px;object-fit: cover;margin-bottom: 10px;
}.product button {background-color: #4CAF50;color: white;border: none;padding: 10px 15px;cursor: pointer;border-radius: 5px;
}.product button:hover {background-color: #45a049;
}.cart-item {display: flex;align-items: center;border-bottom: 1px solid #ddd;padding: 15px 0;
}.cart-item img {width: 80px;height: 80px;object-fit: cover;margin-right: 15px;
}.item-info {flex: 1;
}.item-info button {background-color: #f44336;color: white;border: none;padding: 5px 10px;cursor: pointer;border-radius: 3px;
}.item-info button:hover {background-color: #d32f2f;
}.cart-summary {margin-top: 20px;text-align: right;
}.cart-summary button {background-color: #333;color: white;border: none;padding: 10px 15px;cursor: pointer;border-radius: 5px;
}.cart-summary button:hover {background-color: #555;
}.empty-cart {padding: 20px;text-align: center;color: #666;
}
</style>
五、Vuex 高级技巧
1. 使用辅助函数简化代码
Vuex 提供了 mapState
、mapGetters
、mapMutations
和 mapActions
辅助函数来简化组件中的代码。
<template><div><p>Count: {{ count }}</p><button @click="increment">+</button></div>
</template><script>
import { mapState, mapMutations } from 'vuex';export default {computed: {...mapState(['count'])},methods: {...mapMutations(['increment'])}
}
</script>
2. 严格模式
在开发环境中启用严格模式,确保所有状态变更都通过 mutations。
// store/index.js
export default createStore({strict: process.env.NODE_ENV !== 'production'
});
3. 插件机制
Vuex 插件是一个函数,接收 store 作为唯一参数,可以用于记录日志、持久化存储等。
// store/plugins/logger.js
export default function logger(store) {store.subscribe((mutation, state) => {console.log('Mutation:', mutation.type);console.log('Payload:', mutation.payload);console.log('State after mutation:', state);});
}// store/index.js
import logger from './plugins/logger';export default createStore({plugins: [logger]
});
4. 状态持久化
使用 vuex-persistedstate
插件将 state 持久化到本地存储。
npm install vuex-persistedstate
// store/index.js
import createPersistedState from 'vuex-persistedstate';export default createStore({plugins: [createPersistedState()]
});
六、Vuex 常见问题与解决方案
1. 何时使用 Vuex?
- 多组件共享状态
- 组件间通信复杂
- 状态需要被多个视图监听
- 中大型应用
2. 与 Vue Router 结合使用
在路由导航守卫中访问 Vuex 状态:
router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !store.state.user) {next('/login');} else {next();}
});
3. 性能优化
- 避免在大型列表中频繁修改 state
- 使用
mapState
和mapGetters
缓存计算结果 - 对大型数据使用
Vue.set()
或store.replaceState()
相关文章:
Vuex使用指南:状态管理
一、什么是状态管理?为什么需要 Vuex? 1. 状态管理的基本概念 在 Vue 应用中,状态指的是应用中的数据。例如: 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …...
kotlin中枚举带参数和不带参数的区别
一 ✅ 代码对比总结 第一段(带参数 工具方法) enum class SeatPosition(val position: Int) {DRIVER_LEFT(0),DRIVER_RIGHT(1),SECOND_LEFT(2),SECOND_RIGHT(3);companion object {fun fromPosition(position: Int): SeatPosition? {return SeatPosi…...
【Python】Python好玩的第三方库之二维码生成,操作xlsx文件,以及音频控制器
前言 🌟🌟本期讲解关于python的三种第三方库的使用介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么…...
VTK 交互类介绍
基本概念 交互器(Interactor): 处理用户输入事件的基础类 交互样式(InteractorStyle): 定义具体的交互行为 Widgets: 可交互的UI组件,如滑块、按钮等 Picker: 用于选择场景中的对象 常用交互类 类名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互样式…...
在Window10 和 Ubuntu 24.04LTS 上 Ollama 在线或离线安装部署
Ollama 是一个开源的大型语言模型(LLM)服务框架,旨在通过轻量化、跨平台的设计,简化大模型在本地环境中的部署与应用。其基于 Go 语言开发,通过 Docker 容器化技术封装模型运行环境,提供类似命令行工具的交…...
语音合成之十一 提升TTS语音合成效果:低质量数据清洗、增强与数据扩增
低质量数据清洗、增强与数据扩增 1. 引言:TTS的基石——数据质量2. 基础:TTS数据准备工作流2.1 规划:定义蓝图2.2 执行:从原始数据到训练就绪格式2.3 最佳实践与可复现性 3. 攻克缺陷:低质量语音数据的清洗与增强3.2 手…...
RGB三原色
本文来源 : 腾讯元宝 RGB三原色(红绿蓝)详解 RGB(Red, Green, Blue)是光学的三原色,通过不同比例的混合可以产生人眼可见的绝大多数颜色。它是现代显示技术(如屏幕、投影仪)…...
BUUCTF 大流量分析(一) 1
BUUCTF:https://buuoj.cn/challenges 文章目录 题目描述:密文:解题思路:flag: 相关阅读 CTF Wiki BUUCTF:大流量分析(一) 题目描述: 某黑客对A公司发动了攻击,以下是一段时间内我们…...
虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅
虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅1.电源管理2.显卡优先设置3.拯救者支持FnQ性能模式切换,建议开发前切至“野兽模式”或高性能模式。4.NVIDIA 驱动设置5.VS2022中…...
suna工具调用可视化界面实现原理分析(一)
这是一个基于React构建的工具调用侧边面板组件,主要用于展示和管理自动化工具调用流程。以下是代码功能解析及关键组件分析: 一、核心功能模块 多工具视图切换系统 • 动态视图加载:通过getToolView函数根据工具名称(如execute-c…...
【将你的IDAPython插件迁移到IDA 9.x:核心API变更与升级指南】
文章目录 将你的 IDAPython 插件迁移到 IDA 9.x:核心 API 变更与升级指南为什么 API 会变化?关键不兼容性一:数据库信息访问 (inf_structure)关键不兼容性二:窗口/视图类型判断 (BWN_* 和 form_type)其他可能的 API 变更迁移策略建…...
《Python星球日记》第31天:Django 框架入门
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、Django…...
读《人生道路的选择》有感
读完戴维坎贝尔的《人生道路的选择》,深有感触,虽然只有短短的108也,但作者强调了在复杂的生活环境之中“选择”的重要性。这也是我想要探讨的话题,选择到底会对我们人生产生怎样的影响。 在我们人生当中,确实有许多的…...
opencv+opencv_contrib+cuda和VS2022编译
本文介绍使用OpenCV和OpenCV_Contrib源码及Cuda进行编译的过程,编译过程中会用到OpenCV、OpenCV_Contrib、Toolkit、Cmake、VS2022等工具,最终编译OpenCV的Cuda版本。 一、OpenCV下载地址 OpenCV官网下载地址:https://opencv.org/releases/#࿰…...
STC单片机与淘晶驰串口屏通讯例程之01【新建HDMI工程】
大家好,我是『芯知识学堂』的SingleYork,今天笔者给大家一起学习这款“SYK-0806-A2S1”控制板与淘晶驰串口屏通讯的例程,本例使用的是淘晶驰的4.3寸电阻触摸屏TJC4827T143_011R_I_P20,分辨率为480272,详细参数大家可以查看这个屏的手册。 先来看下本例程整体的效果: 那么…...
PE文件结构(导出表)
导出表 什么是导出表? 导出表是PE文件中记录动态链接库(DLL)对外提供的函数或数据的列表,包含函数名称、序号和内存地址等信息,供其他程序调用 我们写一个dll来查看一下导出函数 int exportFunc1(int a, int b) {ret…...
网络安全自动化:精准把握自动化边界,筑牢企业安全防
在当今数字化时代,网络攻击的威胁日益严峻,企业网络安全的重要性不言而喻。随着海量资产与复杂架构的出现,网络安全自动化成为了众多企业关注的焦点。网络安全维护看似简单的修补系统、删除旧账户、更新软件,在大型企业中却极易变…...
实战设计模式之中介者模式
概述 中介者模式是一种强大且灵活的设计模式,适用于需要优化对象间通信的场景。中介者模式通过引入一个中介对象,来封装一系列对象之间的交互。在没有中介者的情况下,这些对象之间可能会直接相互引用,导致系统中的类紧密耦合&…...
价格识别策略思路
该策略是一种基于价格形态和市场条件的交易算法,旨在通过识别特定的价格模式来生成买入和卖出信号。 价格形态识别 策略的核心在于识别价格的高点和低点形态。通过比较当前周期及其前几个周期的最高价和最低价, 策略定义了一系列条件来判断价格是否形成了…...
Kotlin带接收者的Lambda介绍和应用(封装DialogFragment)
先来看一个具体应用:假设我们有一个App,App中有一个退出应用的按钮,点击该按钮后并不是立即退出,而是先弹出一个对话框,询问用户是否确定要退出,用户点了确定再退出,点取消则不退出,…...
【NLP】32. Transformers (HuggingFace Pipelines 实战)
🤖 Transformers (HuggingFace Pipelines 实战) 本教程基于 Hugging Face 的 transformers 库,展示如何使用预训练模型完成以下任务: 情感分析(Sentiment Analysis)文本生成(Text …...
[ 设计模式 ] | 单例模式
单例模式是什么?哪两种模式? 单例模式就是一个类型的对象,只有一个,比如说搜索引擎中的索引部分,360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式:饿汉模式是线程安全的,懒汉模式不是线程安全的…...
用网页显示工控仪表
一.起因 现在工控也越来越多的使用web页面来显示电压,电流,温度,转速等物理量.本例使用js控制网页显示速度仪表. 二.代码 <html> <head><script type"text/javascript">var ctx;var px0;var movePoint{x0:0,x1:0};function init(){drawFace();m…...
Spring项目改造Solon版,使用体验,对比
概述 对于Solon有些人可能并不了解,在官方概述中,称其是新一代Java企业级应用开发框架,从零开始构建,有自主的标准规范与开放生态。近16万行代码。 并有更快、更小、更简单的特点 什么样的Java项目用Solon好? 按正常…...
2.CFD 计算过程概述:Fluent在散热计算中的优势
1.主流散热软件 2.电子产品热设计的基本要求 3.失效率与温度之间的关系 4.电子产品热设计的基本要求 5.电子产品必须要做散热设计 6.主动散热与被动散热 7.高效山热方案 8.热交换模型 9.Fluent中传热模型...
【Java ee初阶】多线程(6)
一、阻塞队列 队列的原则:“先进先出”,队列分为普通队列,优先级队列等等。在数据结构中,堆是特殊的完全二叉树,一定不要把堆和二叉搜索树混淆。 阻塞队列是一种特殊的队列,也遵循“先进先出”的原则。 …...
Unity:Surface Effector 2D(表面效应器 2D)
目录 什么是表面效应器 2D? 🎯 它是做什么的? 🧪 从第一性原理解释它是怎么工作的 📦 重要参数解释 为什么不直接用 Rigidbody(刚体)来控制运动 ? 所以什么时候该用哪个&#…...
Spring 框架的底层原理
Spring 框架的底层原理主要包括以下几个方面: 核心容器(IoC 容器) IoC(控制反转)原理 : 依赖注入(DI) :这是 IoC 的实现方式之一。在传统的程序开发中,程序组…...
【Unity】AssetBundle热更新
1.新建两个预制体: Cube1:GameObject Material1:Material Cube1使用了Material1材质 之后设置打包配置 Cube1的打包配置为custom.ab Material1的打包配置为mat.ab 2.在Asset文件夹下创建Editor文件夹,并在Editor下创建BuildBundle…...
【算法笔记】动态规划基础(二):背包dp
目录 01背包例题状态表示状态计算初始化AC代码 完全背包例题状态表示状态计算初始化TLE代码 多重背包例题状态表示状态计算初始化AC代码 分组背包例题状态表示状态计算初始化AC代码 二维费用背包例题状态表示状态计算初始化AC代码 混合背包问题例题状态表示状态计算初始化TLE代…...
IP属地是我的定位吗?——解析两者区别
在互联网时代,我们经常看到社交媒体、论坛或APP上显示用户的“IP属地”,许多人会疑惑:IP属地是不是我的精确定位?它会不会暴露我的隐私? 本文将详细解析IP属地和定位的区别,并解答常见的相关问题&#…...
力扣每日一题1128等价多米诺骨牌对的数量
1128. 等价多米诺骨牌对的数量 题目: 给你一组多米诺骨牌 dominoes 。 形式上,dominoes[i] [a, b] 与 dominoes[j] [c, d] 等价 当且仅当 (a c 且 b d) 或者 (a d 且 b c) 。即一张骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌。 在 0 &l…...
SpringBoot集成CXF框架,实现WebService
SpringBoot官网地址:https://spring.io/projects/spring-ws 1、WebService服务端搭建 Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.17&…...
android-ndk开发(2): macOS 安装 ndk
android-ndk开发(2): macOS 安装 ndk 2025/05/05 1. 概要 对于 android-ndk 在 r23 之前的版本,官方提供了 .zip 文件, 解压即安装。 对于 android-ndk 在 r23 以及之后的版本, 官方只提供了 .dmg 文件, 不能简单的解压完成安…...
科创大赛——知识点复习【c++】——第一篇
目录 输入 一、cin 二、scanf 三、gets 四、getchar 五、fgets 输出 一、cout 二、printf 基本数据类型 一,数据类型有哪些? 二,整型(Integer Types) 1,修饰符 2,整型数据的数据范…...
硬件工程师面试常见问题(14)
第六十六问:运放--输入偏置电流和输入失调电流 输入偏置电流lb:是由于运放两个输入极都有漏电流的存在。实际的运放,会有电流流入运放的输入端的。那么输入偏置电流就定义这两个电流的平均值。 输入失调电流 Ios:定义为两个差分输入端偏置电…...
Flink流水线任务在线演示
Flink流水线在线演示 1. 登录系统 访问系统登录页面,输入账号密码完成身份验证。 2. 创建任务 入口:通过顶部菜单栏选择 任务开发,或通过快捷入口 快速创建任务。 任务类型:选择 FlinkPipeline。 3. 配置任务 进入配置界面…...
C++笔记之接口`Interface`
C++笔记之接口Interface code review! 一个简洁简短的 C++ 接口实现示例: #include <iostream>// 1. 定义接口(抽象类) class Shape {public:...
css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
文章目录 1. 前言2. 用法2.1 基本语法2.2. 与max-width、max-height等属性结合使用2.3. 动态计算比例 3. 应用场景4. 兼容性和替代方案5. 总结 1. 前言 在网页制作过程中,有时候我们只知道宽度,或者只知道高度,这时候需要制作一个4:3和9:16这…...
深入探索 Apache Spark:从初识到集群运行原理
深入探索 Apache Spark:从初识到集群运行原理 在当今大数据时代,数据如同奔涌的河流,蕴藏着巨大的价值。如何高效地处理和分析这些海量数据,成为各行各业关注的焦点。Apache Spark 正是为此而生的强大引擎,它以其卓越…...
0903Redux改造项目_用户信息_状态管理-react-仿低代码平台项目
文章目录 1 Redux管理用户信息1.1 定义store和reducer1.2 使用useSeletor 2 自定义Hook统一加载用户信息存储Redux3 根据用户登录状态动态跳转页面结语 1 Redux管理用户信息 1.1 定义store和reducer src/store/userReducer.ts代码如下所示: import { createSlice…...
PyTorch_构建线性回归
使用 PyTorch 的 API 来手动构建一个线性回归的假设函数,数据加载器,损失函数,优化方法,绘制训练过程中的损失变化。 数据构建 import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt i…...
领略算法真谛: 多源bfs
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
Linux的web服务器的部署及优化
实验环境的配置 我们依然是要配置本地软件仓库,之前已有详细介绍,然后再次基础上还有如下操作,首先是进入到以下文件进行编辑 编辑内容为下,并且注意自身的网关有没有写错 然后给予权限 再进行下列操作后,就配置完成了…...
ASP.NET Core 请求限速的ActionFilter
文章目录 前言一、实现步骤1)创建自定义Action Filter示例1:示例2: 2)注册服务3)使用 二、实现说明总结 前言 以下是一个基于内存缓存实现的自定义限流Action Filter。 一、实现步骤 1)创建自定义Action…...
本地化语音转换工具推荐与使用
软件介绍 Buzz是一款基于OpenAI Whisper技术开发的开源语音转文字工具,支持离线运行和实时语音转换,能够高效完成会议记录、音频转文字等任务。 安装注意事项 在使用Buzz之前需要注意软件的安装设置,由于程序自带较大的模型文件&…...
【心海资源】telegram换U地址完整源码
【心海资源】telegram换U地址完整源码 未测,需要的下载完整的 下载地址:下载地址.txt - 蓝奏云...
神经网络开发实战:从零基础到企业级应用(含CNN、RNN、BP网络代码详解)
简介 神经网络作为深度学习的核心,正在成为现代AI应用的基石。从基础的感知机到复杂的Transformer架构,从图像识别到自然语言处理,神经网络技术的演进推动了人工智能的快速发展。本文将系统介绍神经网络的核心概念、主流模型及其实现原理,并通过三个企业级实战案例(医学图…...
C# WPF 布局
C# 0、WPF 布局 1、ON/OFF按钮 2、textBox 3、ComboBox 4、TabControl 5、Button <Window x:Class"WpfApp5.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…...
【PaaS与AI融合】MLOps平台的架构设计
PaaS与AI融合:MLOps平台的架构设计 一、技术背景与发展趋势二、技术架构核心特征1. 全生命周期管理闭环2. 混合编排引擎3. 智能资源调度三、关键技术实现细节1. 持续集成流水线2. 异构资源管理3. 安全治理体系四、行业实践与未来演进典型案例分析发展趋势展望五、架构设计建议…...