返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React 状态管理工具优劣势示例分析
  • 660
分享到

React 状态管理工具优劣势示例分析

React 状态管理工具优劣势React 状态管理工具 2023-01-13 12:01:32 660人浏览 薄情痞子
摘要

目录什么是状态管理?React 状态管理方案方案介绍方案对比Source相关建议什么是状态管理? “状态”是描述应用程序当前行为的任何数据。这可能包括诸如&

什么是状态管理?

“状态”是描述应用程序当前行为的任何数据。这可能包括诸如“从服务器获取的对象列表”、“当前选择的项目”、“当前登录用户的名称”和“此模式是否打开?”等值。

众所周知,我们在研发一个复杂应用的过程中,一套好的状态管理方案是必不可少的,既能提升研发效率,又能降低研发维护成本,那么状态管理方案那么多,它们有什么不同,我们又该如何选择适合当前应用的方案呢?

本期将主要就 react 的常用状态管理方案进行对比分析,希望对各位看客有帮助。

React 状态管理方案

方案介绍

  • hook context
  • react-redux
  • mobx
  • zustand
  • jotai
  • valtio

方案对比

框架原理优点缺点
hooks context基于 react hook,开发者可实现内/外部存储1. 使用简单
2. 不需要引用第三方库,体积最小
3. 支持存储全局状态,但在复杂应用中不推荐
4. 不依赖 react 上下文,可在组件外调用(外部存储的条件下)
1. context value发生变化时,所有用到这个context的组件都会被重新渲染,基于 content 维护的模块越多,影响范围越大。
2. 使用依赖 provider,修改 store 无法在应用最顶层(App.tsx 层级)触发渲染
3. 受ui框架约束(react)
4. 依赖hooks调用
react-reduxFlux思想,发布订阅模式,遵从函数式编程,外部存储1. 不依赖 react 上下文,可在组件外调用
2. 支持存储全局状态
3.不受ui框架约束
1. 心智模型需要一些时间来理解,特别是当你不熟悉函数式编程的时候
2. 编码繁琐
mobx观察者模式 + 数据截止,外部存储1. 使用简单
2. 不依赖 react 上下文,可在组件外调用
3. 支持存储全局状态
4.不受ui框架约束
1.可变状态模型,某些情况下可能影响调试 2. 除了体积相对较大之外,笔者目前未感觉到较为明显的缺点,3.99M
zustandFlux思想,观察者模式,外部存储1. 轻量,使用简单
2. 不依赖 react 上下文,可在组件外调用
3. 支持存储全局状态
1.框架本身不支持 computed 属性,但可基于 middleware 机制通过少量代码间接实现 computed ,或基于第三方库 zustand-computed 实现
2.受ui框架约束(react / Vue)
jotai基于 react hook,内部存储1. 使用简单
2. 组件颗粒度较细的情况下,jotai性能更好
3.支持存储全局状态,但在复杂应用中不推荐
1. 依赖 react 上下文, 无法组件外调用,相对而言, zustand 在 react 环境外及全局可以更好地工作
2. 受ui框架约束(react)
valtio基于数据劫持,外部存储1. 使用简单,类mobx(类vue)的编程体验
2.支持存储全局状态
3.不依赖 react 上下文,可在组件外调用
4. 不受ui框架约束
1.可变状态模型,某些情况下可能影响调试
2.目前笔者没发现其它特别大的缺点,个人猜测之所以star相对zustand较少,是因为 valtio 的数据双向绑定思想与 react 存在冲突。

Source

  • hooks context

1.使用 react hooks + context 进行方便快捷的状态管理

2.使用 react hooks + context 构建 redux 进行状态管理

react-redux

  • mobx
import React from "react"
import ReactDOM from "react-dom"
import { makeAutoObservable } from "mobx"
import { observer } from "mobx-react"
// 状态及相关事件
class Timer {
    secondsPassed = 0
    constructor() {
        makeAutoObservable(this)
    }
    increase() {
        this.secondsPassed += 1
    }
    reset() {
        this.secondsPassed = 0
    }
}
const myTimer = new Timer()
// 构建可观擦组件
const TimerView = observer(({ timer }) => (
    <button onClick={() => timer.reset()}>Seconds passed: {timer.secondsPassed}</button>
))
ReactDOM.render(<TimerView timer={myTimer} />, document.body)
// 触发更新事件
setInterval(() => {
    myTimer.increase()
}, 1000)
  • zustand
import { create } from 'zustand'
// 状态及相关事件
const useBearStore = create((set) => ({
  bears: 0,
  increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
  removeAllBears: () => set({ bears: 0 }),
}))
// 渲染视图
function BearCounter() {
  const bears = useBearStore((state) => state.bears)
  return <h1>{bears} around here ...</h1>
}
// 触发更新事件
function Controls() {
  const increasePopulation = useBearStore((state) => state.increasePopulation)
  return <button onClick={increasePopulation}>one up</button>
}
  • jotai
import { atom } from 'jotai'
const countAtom = atom(0)
function Counter() {
  // 状态及相关事件
  const [count, setCount] = useAtom(countAtom)
  return (
    <h1>
      {count}
      <button onClick={() => setCount(c => c + 1)}>one up</button>
    </h1>
  )
}
  • valtio
import { proxy, useSnapshot } from 'valtio'
const state = proxy({ count: 0, text: 'hello' })
function Counter() {
  const snap = useSnapshot(state)
  return (
    <div>
      {snap.count}
      <button onClick={() => ++state.count}>+1</button>
    </div>
  )

相关建议

  • 如果你需要useState+useContext的替代品,那么jotai非常适合,即少量组件间状态共享。
  • 如果你习惯了redux或喜欢react的自然不可变更新,那么zustand将非常适合。
  • 如果你习惯了vue/ slute /mobx,或者是js/React的新手,valtio的可变模型将很适合。
  • 如果你在使用 zustand(redux/等不可变数据模型) + immer,建议改用valtio(mobx)
  • mobx有actions概念,而valtio概念更为简单(自由),如果你希望工程更为规范,可以使用mobx,如果是希望工程更为自由便捷,可以使用valtio

以上就是React 状态管理工具优劣势示例分析的详细内容,更多关于React 状态管理工具优劣势的资料请关注编程网其它相关文章!

--结束END--

本文标题: React 状态管理工具优劣势示例分析

本文链接: https://lsjlt.com/news/177618.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React 状态管理工具优劣势示例分析
    目录什么是状态管理React 状态管理方案方案介绍方案对比Source相关建议什么是状态管理 “状态”是描述应用程序当前行为的任何数据。这可能包括诸如&ld...
    99+
    2023-01-13
    React 状态管理工具优劣势 React 状态管理工具
  • 【整理分享】7个热门的React状态管理工具
    最近在做项目技术栈整理工作;由于团队越来越大、人员增多、项目增多;统一技术栈是一件非常有必要的事;React 状态管理工具有很多,但是选择一个合适的状态管理工具其实很重要;今天跟大家分享一下我整理的几个非常热门的 React状态管理,希望对...
    99+
    2023-05-14
    React 前端 JavaScript
  • SaltStack与传统管理工具的比较:优势和劣势
    SaltStack是一个开源的自动化配置和管理工具,它可以帮助用户轻松地管理多个系统。与传统的管理工具相比,SaltStack具有许多独特的优势和劣势。 SaltStack的优势: 易于使用:SaltStack的命令行界面非常用户友好...
    99+
    2024-02-07
    SaltStack 传统管理工具 比较 优势 劣势
  • vuex状态管理模式的示例分析
    小编给大家分享一下vuex状态管理模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言本次接受一个BI系统,要求...
    99+
    2024-04-02
  • Vue状态管理工具Vuex工作原理解析
    目录一、什么是vuex二、vuex的工作方式三、vuex的使用场景四、工作流程五、vuex的核心API六、应用七、vuex的工作流程一、什么是vuex Vuex是vue项目的状态管理...
    99+
    2023-02-01
    Vue状态管理工具Vuex Vue状态管理器Vuex Vue Vuex
  • react-redux及redux状态管理工具使用详解
    目录react-redux使用及原理1、下载 react-redux redux redux-thunk三个依赖包2、配置store对象,用来管理全局状态3、创建reducer.js...
    99+
    2023-01-31
    redux状态管理 react-redux状态管理
  • vue状态管理实例分析
    这篇文章主要介绍“vue状态管理实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue状态管理实例分析”文章能帮助大家解决问题。场景:一个地图应用,有个侧边栏...
    99+
    2024-04-02
  • Vue3新状态管理工具实例详解
    目录前言安装创建StoreState定义State获取state修改stateGettersActions异步actionaction间相互调用数据持久化安装使用自定义key持久化部...
    99+
    2024-04-02
  • Flutter状态管理Provider示例解析
    目录什么是状态管理常见的状态管理框架有哪些ProviderReduxGetXProvider 使用添加依赖导入应用定义需要共享的数据在应用程序入口初始化使用共享数据状态管理的好处结束...
    99+
    2022-12-08
    Flutter状态管理Provider Flutter Provider
  • vue中状态管理模式vuex的示例分析
    这篇文章主要介绍了vue中状态管理模式vuex的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vuex是一个专门为vue.js设计的...
    99+
    2024-04-02
  • vuejs中vuex状态管理模式的示例分析
    这篇文章给大家分享的是有关vuejs中vuex状态管理模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关于vuex类的新闻最近很多,看到眼热就去查了下资料,然后扯出来...
    99+
    2024-04-02
  • Vue 2.X中状态管理vuex的示例分析
    这篇文章将为大家详细讲解有关Vue 2.X中状态管理vuex的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。示例:记住上述的顺序情况:想要改变state,只能通过...
    99+
    2024-04-02
  • JavaScript React 中的 Redux:驾驭状态管理的强大工具
    Redux 是一个用于 JavaScript 应用程序状态管理的库。它提供了一个集中式存储,可用于管理整个应用程序的状态,从而实现状态的可预测性和可调试性。 核心概念 Store: 一个集中式存储,用于持有应用程序的状态。 Action...
    99+
    2024-04-02
  • java之Hibernate状态整理的示例分析
    这篇文章主要介绍了java之Hibernate状态整理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java有哪些集合类Java中的集合主要分为四类:1、List列...
    99+
    2023-06-14
  • Mac清理优化工具CleanMyMac X 4.6.0的示例分析
    这篇文章将为大家详细讲解有关Mac清理优化工具CleanMyMac X 4.6.0的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。软件介绍CleanMyMac X是一款集多种功能于一...
    99+
    2023-06-03
  • 浅析Vue项目中怎么用Pinia状态管理工具
    安装yarn add pinia -Smain.js引入import {createApp} from "vue" import App from "./app.vue" import store f...
    99+
    2022-11-22
    Vue Pinia
  • webpack模块化管理和打包工具的示例分析
    小编给大家分享一下webpack模块化管理和打包工具的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Webpack简介w...
    99+
    2024-04-02
  • Puppet服务器与其他自动化工具的比较:优劣势分析
    Puppet服务器是一个强大的自动化工具,可以轻松地管理基础设施。它基于模型驱动的体系结构,您可以使用它来定义基础设施的状态,然后Puppet服务器将执行必要的更改以使基础设施与定义的状态相匹配。Puppet服务器具有许多优点,包括: ...
    99+
    2024-02-23
    Puppet 服务器 自动化工具 对比 优劣势
  • vue组件化开发种vuex状态管理库的示例分析
    这篇文章主要介绍vue组件化开发种vuex状态管理库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中...
    99+
    2024-04-02
  • React中无状态组件与高阶组件的示例分析
    这篇文章主要介绍React中无状态组件与高阶组件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!无状态组件(Stateless Component) 是 React 0.14...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作