当前位置: 首页 > article >正文

前端状态管理:别让你的应用状态一团糟

前端状态管理别让你的应用状态一团糟什么是前端状态管理前端状态管理是指管理前端应用中数据状态的方法和工具。别以为状态管理只是简单的变量存储复杂的应用状态管理不当会让你的代码变成一团糟。为什么需要状态管理统一管理状态集中管理应用状态避免状态分散提高代码可维护性清晰的状态管理可以提高代码可读性和可维护性优化性能合理的状态管理可以减少不必要的渲染便于调试集中的状态管理便于调试和追踪状态变化前端状态管理方案1. 本地状态管理本地状态管理是指在组件内部管理状态适用于简单的状态。// React useState import React, { useState } from react; function Counter() { const [count, setCount] useState(0); return ( div pCount: {count}/p button onClick{() setCount(count 1)}Increment/button /div ); } // Vue data template div pCount: {{ count }}/p button clickincrementIncrement/button /div /template script export default { data() { return { count: 0 }; }, methods: { increment() { this.count; } } }; /script2. 上下文状态管理上下文状态管理是指使用React Context或Vue Provide/Inject等API在组件树中共享状态。// React Context import React, { createContext, useContext, useState } from react; const CountContext createContext(); export function CountProvider({ children }) { const [count, setCount] useState(0); return ( CountContext.Provider value{{ count, setCount }} {children} /CountContext.Provider ); } export function useCount() { const context useContext(CountContext); if (!context) { throw new Error(useCount must be used within a CountProvider); } return context; } // 使用 function Counter() { const { count, setCount } useCount(); return ( div pCount: {count}/p button onClick{() setCount(count 1)}Increment/button /div ); } // Vue Provide/Inject // 父组件 template div child-component / /div /template script export default { provide() { return { count: this.count, increment: this.increment }; }, data() { return { count: 0 }; }, methods: { increment() { this.count; } } }; /script // 子组件 template div pCount: {{ count }}/p button clickincrementIncrement/button /div /template script export default { inject: [count, increment] }; /script3. 第三方状态管理库第三方状态管理库如Redux、Zustand、Jotai、Pinia等提供了更强大的状态管理功能。3.1 ReduxRedux是一个流行的状态管理库基于Flux架构。// 安装 // npm install redux react-redux reduxjs/toolkit // store.js import { configureStore, createSlice } from reduxjs/toolkit; const counterSlice createSlice({ name: counter, initialState: { value: 0 }, reducers: { increment: (state) { state.value 1; }, decrement: (state) { state.value - 1; }, incrementByAmount: (state, action) { state.value action.payload; } } }); export const { increment, decrement, incrementByAmount } counterSlice.actions; export const store configureStore({ reducer: { counter: counterSlice.reducer } }); // 使用 import { useSelector, useDispatch } from react-redux; import { increment, decrement } from ./store; function Counter() { const count useSelector((state) state.counter.value); const dispatch useDispatch(); return ( div pCount: {count}/p button onClick{() dispatch(increment())}Increment/button button onClick{() dispatch(decrement())}Decrement/button /div ); }3.2 ZustandZustand是一个轻量级的状态管理库提供了简洁的API。// 安装 // npm install zustand // store.js import create from zustand; export const useStore create((set) ({ count: 0, increment: () set((state) ({ count: state.count 1 })), decrement: () set((state) ({ count: state.count - 1 })), incrementByAmount: (amount) set((state) ({ count: state.count amount })) })); // 使用 import { useStore } from ./store; function Counter() { const count useStore((state) state.count); const increment useStore((state) state.increment); const decrement useStore((state) state.decrement); return ( div pCount: {count}/p button onClick{increment}Increment/button button onClick{decrement}Decrement/button /div ); }3.3 JotaiJotai是一个原子化的状态管理库基于React的useState。// 安装 // npm install jotai // atoms.js import { atom } from jotai; export const countAtom atom(0); export const doubleCountAtom atom((get) get(countAtom) * 2); // 使用 import { useAtom } from jotai; import { countAtom, doubleCountAtom } from ./atoms; function Counter() { const [count, setCount] useAtom(countAtom); const [doubleCount] useAtom(doubleCountAtom); return ( div pCount: {count}/p pDouble Count: {doubleCount}/p button onClick{() setCount(count 1)}Increment/button button onClick{() setCount(count - 1)}Decrement/button /div ); }3.4 PiniaPinia是Vue的官方状态管理库替代了Vuex。// 安装 // npm install pinia // store.js import { defineStore } from pinia; export const useCounterStore defineStore(counter, { state: () ({ count: 0 }), getters: { doubleCount: (state) state.count * 2 }, actions: { increment() { this.count; }, decrement() { this.count--; }, incrementByAmount(amount) { this.count amount; } } }); // 使用 template div pCount: {{ counter.count }}/p pDouble Count: {{ counter.doubleCount }}/p button clickcounter.incrementIncrement/button button clickcounter.decrementDecrement/button /div /template script setup import { useCounterStore } from ./store; const counter useCounterStore(); /script前端状态管理最佳实践选择合适的状态管理方案根据应用复杂度选择合适的状态管理方案合理划分状态将状态划分为全局状态和局部状态使用不可变数据避免直接修改状态使用不可变数据模式状态规范化使用规范化的状态结构避免冗余数据使用中间件使用中间件处理异步操作、日志记录等测试状态管理编写测试确保状态管理的正确性监控状态变化监控状态变化及时发现问题前端状态管理常见问题1. 状态过于分散问题状态分散在多个组件中难以管理。解决方案使用全局状态管理库合理划分状态将相关状态集中管理2. 状态更新导致性能问题问题状态更新导致不必要的组件渲染。解决方案使用React.memo、useMemo、useCallback等优化渲染使用选择器选择需要的状态避免不必要的重渲染合理设计状态结构减少状态更新的范围3. 异步操作处理复杂问题异步操作如API调用处理复杂容易出错。解决方案使用Redux Thunk、Redux Saga等中间件处理异步操作使用async/await和Promise处理异步操作设计合理的异步状态管理流程4. 状态持久化困难问题页面刷新后状态丢失。解决方案使用localStorage、sessionStorage等存储状态使用Redux Persist等库实现状态持久化设计合理的状态恢复机制前端状态管理的未来趋势原子化状态管理如Jotai、Recoil等原子化状态管理库的流行Server Components服务端组件减少客户端状态管理的复杂度AI辅助状态管理使用AI自动优化状态管理状态管理与UI分离更清晰的状态管理与UI分离跨平台状态管理统一的状态管理方案适用于不同平台总结前端状态管理是前端开发中的重要部分选择合适的状态管理方案和遵循最佳实践可以提高代码质量和开发效率。别让你的应用状态一团糟重视前端状态管理吧

相关文章:

前端状态管理:别让你的应用状态一团糟

前端状态管理:别让你的应用状态一团糟 什么是前端状态管理? 前端状态管理是指管理前端应用中数据状态的方法和工具。别以为状态管理只是简单的变量存储,复杂的应用状态管理不当会让你的代码变成一团糟。 为什么需要状态管理? 统一…...

新手必看:Qwen3-Reranker-0.6B部署避坑指南与常见问题

新手必看:Qwen3-Reranker-0.6B部署避坑指南与常见问题 1. 为什么选择Qwen3-Reranker-0.6B 1.1 轻量高效的语义重排序模型 Qwen3-Reranker-0.6B是阿里云推出的轻量级重排序模型,仅有0.6B参数(约6亿),但性能表现优异。…...

996引擎 - [开发辅助] 利用 robocopy 同步项目 dev 文件夹

996引擎 - [开发辅助] 利用 robocopy 同步项目 dev 文件夹 代码 git 管,资源统一放内网服务器。 使用以下脚本同步 岗位 同步方向 需求 策划 本地 >>> 内网服务器 提交资源 美术 本地 >>> 内网服务器 提交资源 程序 内网服务器 >>> 本地 拉取资源 …...

AI直播背景替换终极指南:OBS智能抠像插件完整教程

AI直播背景替换终极指南:OBS智能抠像插件完整教程 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gitc…...

如何用ExifToolGUI解决数字照片元数据管理难题:5个专业工作流优化方案

如何用ExifToolGUI解决数字照片元数据管理难题:5个专业工作流优化方案 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui ExifToolGUI是一款基于ExifTool的图形化元数据管理工具,专为摄…...

【UE4/UE5 萌新向】有C++基础如何快速入门虚幻引擎?超详细图文全揭秘!

观众老爷们大家好 我是邪修KING 欢迎来到我的TA->UE游戏引擎博客—入门篇! C!高门槛!精选学习!前言 如果你和我一样,刚刚啃完了C语言、数据结构,并且掌握了C的类和对象和STL,现在看着电脑里刚…...

我试了四种去除 Gemini 水印的方法,整理成一篇实用对比野

认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...

JDK 21最新版安装配置全攻略:从Oracle账户获取到环境变量设置(附可用共享账号)

JDK 21高效安装与深度配置实战指南 Java开发环境的搭建是每位开发者入门的必修课,但Oracle官网的账户限制和复杂的配置流程常常让新手望而却步。本文将彻底解决这些问题,不仅提供绕过Oracle登录限制的实用方案,还会深入解析环境变量配置的底层…...

AI原生研发运维自动化成熟度评估矩阵(CMMI-AIOps 2.1版):含19项量化指标、自测工具包与TOP3瓶颈突破路线图

第一章:AI原生研发运维自动化成熟度评估矩阵(CMMI-AIOps 2.1版)概览 2026奇点智能技术大会(https://ml-summit.org) CMMI-AIOps 2.1版是面向AI原生系统全生命周期的评估框架,聚焦模型开发、训练调度、推理服务、可观测性治理与自…...

SEAL: Enhancing Multimodal LLMs with Dynamic Visual Search for High-Resolution Image Understanding

1. 为什么高分辨率图像理解对多模态大模型如此重要? 想象一下你正在用手机查看一张4000万像素的旅游照片,试图找出远处山脚下的小木屋。人类可以自然地通过视觉搜索机制——先扫描整体景观,再逐步聚焦到特定区域——快速定位目标。但现有的多…...

OpenClaw 飞书机器人对接教程,零基础一步到位

前言 OpenClaw(小龙虾)v2.6.0版本支持飞书机器人对接,完成配置后,可直接在飞书聊天窗口向机器人发送自然语言指令,由OpenClaw自动拆解任务、操控电脑执行操作,实现飞书端远程下达AI任务的效果。 OpenClaw…...

墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成

墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成 遇到网站打不开,显示“403 Forbidden”,是不是感觉有点懵?这个错误在运维和开发中太常见了,它就像一道“禁止入内”的门,告诉你服务器收到了请求&a…...

p-stable LSH与E2LSH:从理论到实践的欧氏空间近似最近邻搜索

1. 当高维数据遇上最近邻搜索:从暴力破解到LSH 想象一下,你手里有一张包含100万张图片的数据集,每张图片都被表示成4096维的特征向量。现在用户上传了一张新图片,你需要快速找到数据集中与它最相似的10张图片。如果采用暴力搜索&a…...

ArchivePasswordTestTool技术深度解析:基于7zip引擎的自动化密码测试架构实现

ArchivePasswordTestTool技术深度解析:基于7zip引擎的自动化密码测试架构实现 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在…...

mPLUG零售分析:消费者行为视觉识别方案

mPLUG零售分析:消费者行为视觉识别方案 1. 引言 走进任何一家零售门店,你是否曾好奇:顾客进门后往哪里走?他们在哪个货架前停留最久?哪些商品被拿起又放下?这些看似简单的行为背后,隐藏着消费…...

Overleaf上LaTeX Beamer字体自定义实战:手把手教你用fontspec包搞定中文和英文字体

Overleaf平台LaTeX Beamer字体定制全攻略:从基础配置到高级技巧 在学术报告和教学演示领域,LaTeX Beamer因其专业的排版质量和稳定的输出效果而备受青睐。然而,当涉及到中英混排场景时,许多用户都会遇到字体配置的挑战——如何让中…...

OpenCore引导菜单深度解析:从单调文本到专业图形界面的进阶调优

OpenCore引导菜单深度解析:从单调文本到专业图形界面的进阶调优 【免费下载链接】OpenCore-Install-Guide Repo for the OpenCore Install Guide 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Install-Guide OpenCore作为现代黑苹果引导方案的核心…...

从‘单向导电’到‘电流引导’:重新理解GPIO保护二极管的真实工作模式

从‘单向导电’到‘电流引导’:重新理解GPIO保护二极管的真实工作模式 在嵌入式硬件设计中,GPIO保护二极管常被简化为"防反接开关"的角色,这种认知掩盖了其作为动态电流路径选择器的本质。当我们用阻抗网络和分流原理重新审视这个经…...

Android集成chineseocr_lite实战:4.7M超轻量级中文OCR完整指南

Android集成chineseocr_lite实战:4.7M超轻量级中文OCR完整指南 【免费下载链接】chineseocr_lite 超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) crnn(2.5M) anglenet(378KB)) 总模型仅4.7M 项目地址: https://gitcode.…...

解决Bootstrap项目中日期时间选择难题:bootstrap-datetimepicker深度集成指南

解决Bootstrap项目中日期时间选择难题:bootstrap-datetimepicker深度集成指南 【免费下载链接】bootstrap-datetimepicker 项目地址: https://gitcode.com/gh_mirrors/boo/bootstrap-datetimepicker 在Bootstrap项目开发中,日期时间选择器是表单…...

STM32实战指南_打造智能厨房安全卫士(硬件选型+代码解析+调试技巧)

1. 项目背景与需求分析 厨房是家庭安全隐患的高发区域,尤其是燃气泄漏和高温引发的安全问题。去年我邻居家就因燃气阀门未关紧导致轻微中毒,这件事让我下定决心开发一个低成本、高可靠性的厨房安全监测系统。基于STM32的方案不仅成本可控(整…...

Vivado里用Block Memory Generator搞个双端口RAM,这5个坑我帮你踩过了

Vivado双端口RAM配置实战:Block Memory Generator避坑指南 在FPGA开发中,高效利用片上存储资源是提升系统性能的关键。Xilinx Vivado提供的Block Memory Generator(BMG)IP核能够快速生成优化的存储结构,但其中双端口RA…...

Legacy iOS Kit:让旧款iPhone/iPad重获新生的终极降级工具

Legacy iOS Kit:让旧款iPhone/iPad重获新生的终极降级工具 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

Qwen3智能字幕系统部署案例:中小企业视频号运营字幕自动化方案

Qwen3智能字幕系统部署案例:中小企业视频号运营字幕自动化方案 1. 引言:视频运营的字幕痛点与解决方案 在短视频内容爆发的时代,中小企业视频号运营面临一个共同难题:字幕制作。传统手动添加字幕的方式不仅耗时耗力,…...

手把手教你用STM32F103C8T6和HC-06蓝牙模块,实现手机App远程控制LED灯

从零搭建STM32蓝牙LED控制系统:硬件连接、代码解析与手机端交互全指南 当你第一次看到手机App能远程控制LED灯亮灭时,那种"科技魔法成真"的兴奋感,正是嵌入式开发的魅力所在。本文将带你用最常见的STM32F103C8T6开发板(…...

Win10环境下GY8508 CAN总线驱动安装全流程与哈希值校验绕过技巧

1. GY8508 CAN总线驱动安装前的准备工作 在工业自动化领域,GY8508 CAN总线设备是常见的通信接口模块。但在Windows 10系统上安装驱动时,很多工程师都会遇到哈希值校验失败的问题。我去年在给某汽车生产线调试设备时就遇到过这个坑,折腾了大半…...

【文献分享】CONCERT 在空间转录组学中预测了针对特定领域的扰动反应

文章目录介绍代码参考介绍 空间扰动转录组学用于测量基因或化学修饰如何改变基因表达,同时保持组织环境的完整性。扰动的结果取决于细胞的内在状态,也取决于这些影响在细胞微环境中的传播方式。 我们推出了 CONCERT 这款针对特定区域的生成模型&#xf…...

matlab 点云体素中心最近邻点下采样(详细过程版)

目录 一、算法原理 1、实现过程 二、代码实现 三、结果展示 博客长期更新,本文最近一次更新时间为:2026年4月10日。 一、算法原理 1、实现过程 点云体素最近邻点滤波核心思想是通过空间网格化,在每个网格(体素)内仅保留一个最具代表性的点,以达到简化点云、减少数据量的…...

从零到精通:Windows系统风扇控制终极方案深度解析

从零到精通:Windows系统风扇控制终极方案深度解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fan…...

医疗AI助手MedGemma X-Ray:一键部署,体验智能影像识别与分析

MedGemma X-Ray:一键部署,体验智能影像识别与分析 1. 医疗AI助手的革命性价值 在医学影像领域,每一张X光片都承载着关键的健康信息。传统影像分析高度依赖医生的经验积累,而MedGemma X-Ray的出现,为这一领域带来了全…...