简单又强大的状态管理器——Mobx

前言

在我们项目开发中,我们都必不可少的会用到状态管理器,这时候我们就要选择一个合适又趁手的工具了,那这里我就来给小伙伴们推荐一个简单又强大的状态管理器------Mobx。

介绍

首先,我们来介绍一下Mobx状态管理器,Mobx它采用的是响应式编程,可以帮助我们轻松的管理和跟踪项目中数据的状态变化。它不仅支持 React 还支持React Native和其他一些 javascript(例如 vue 等等) 项目。

对于我们而言,它具有如下的优点:

  1. 简洁和易用: Mobx 的设计思想就是保持简单和最小化,在项目中使用非常直观和容易上手。我们只需要用它提供出来的AP方法来标记数据,它即可帮助我们自动追踪和更新状态。
  2. 响应式: Mobx 使用了观察者模式,被它追踪的数据会自动计算并渲染。
  3. 性能好: Mobx小巧轻便,状态更新机制也更加高效,这使得它的性能十分出色。
  4. 灵活:Mobx 可以适用于多种架构,可以不同的框架和库一起使用。

使用

在使用之前,我们首先要清楚,Mobx 有三个非常重要的概念, 分别为:

  1. State(状态): State指的就是能被 Mobx 追踪到的响应式状态数据。当 Mobx 观察到状态发生变化时,相关的依赖就会自动更新。
  2. Conputed(计算属性): Conputed 与 Vue 的 Conputed 相似,具有缓存机制,只有在其依的状态发生变化时,计算属性才会重新计算。
  3. Action(动作): Action 则是用来改变状态的,为了确保状态的一致性和可追踪性,在仓库里定义的状态都必须在内部提供修改的方法。

在了解完 Mobx 的这三个核心概念之后,接下来我们展开细细的说说它们是如何使用的。

准备

在详细展开之前,我们还要做一些准备工作,毕竟概念再详细,他也得在在仓库里才能派上用场。所以我们首先要搭建一个仓库。

如下所示: 我们先创建好一个这样的仓库。inedx.js 是我们将仓库抛出的给项目引用的文件,task.Store.js 则是我们大展拳脚的仓库。

index.js 文件内容如下:

javascript 复制代码
import React from 'react';
import TaskStore from './task.Store';
// 实例化根store, 并注入context
const StoreContext = React.createContext( new TaskStore())
export const useStore = () => React.useContext(StoreContext)

task.Store.js 文件如下:

arduino 复制代码
class TaskStore {
}
export default TaskSto

这样一个空仓库我们就已经建好并抛出了。

State

当我们建完了空仓库之后,我们即可在仓库内定义我们需要的状态了。

yaml 复制代码
class TaskStore {
    list = [
        {
            id: 1,
            name: 'react',
            isDone: false
        },
        {
            id: 2,
            name: 'vue',
            isDone: false
        }
    ]
}

例如上述代码一样,我们定义出来的 list 状态就是可以被我们追踪到了状态了,我们可以其中定义任何类型。

Action

在上面的步骤里,我们已经定义好了我们的状态,接着就是修改这状态的动作了。

javascript 复制代码
class TaskStore {
    checkItem (id) {
       const item =  this.list.find((item) => {
            return item.id == id
        })
        item.isDone = !item.isDone
    }
    delItem(id) {
       this.list = this.list.filter(item => item.id !== id)
    }
}

如上述代码,我们通过 this 属性就可拿到我们仓库内部的状态,再通过函数的方式来进行对这些状态修改的动作。这样我们确保状态的一致性和可追踪性了。

Conputed

这计算属性与状态的定义就有一些的不用,它不能直接定义在仓库中,而是需要一些如下的操作。

kotlin 复制代码
import { makeAutoObservable, computed} from 'mobx'
class TaskStore {
    constructor () {
        makeAutoObservable(this, {
            completed: computed,
            allTask: computed
        })
    }
    get completed() {
        return this.list.filter(item => item.isDone).length
    }
    get allTask() {
        return this.list.length
    }
}

如上述代码所示,我们额外借助了 Mobx 的makeAutoObservablecomputed两个 API 方法去将completedallTask声明成计算属性,这样我们才能将其定义成计算属性。

应用

在我们成功的将我们需要的状态放入仓库以后,那下一步就该在项目中应用了。这应用分三步走。

第一步,我们将仓库引入到组件中,并实例化它的动作和状态,代码如下所示:

javascript 复制代码
import { useStore } from '../../stroe'
function TodoList() {
    const taskStore= useStore()
    const onChange = (id) => taskStore.checkItem(id)
    const onDel = (id) => taskStore.delItem(id)
}

第二步,我们将仓库与组件串联起来,这里用到的就是 Mobx 提供的一个 API 方法,代码如下所示:

javascript 复制代码
import { observer } from 'mobx-react-lite'
export default observer(TodoList)

第三步,我们接口直接在 DOM 结构上使用了。

这样我们就完成了仓库和组件的联动。实现了对某些状态的全局管理了。

总结

总的来说, Mobx 虽然是简洁易用,且也能很好的适用于项目中,但是它不是React官方支持的状态管理器,某些场景特殊我们可能需要做一些额外的操作才能良好的集成。所以在使用时我们也需要考虑我们项目的大小和使用的场景它能不能完美的适配。

相关推荐
一头小鹿3 分钟前
Vue 和 React中的状态管理机制
vue.js·react.js
jqq6663 分钟前
Vue3脚手架实现(七、渲染eslint配置)
前端·javascript·vue.js
Mintopia5 分钟前
BVH:光线追踪里的空间管家
前端·javascript·计算机图形学
Mintopia11 分钟前
Three.js 射线拾取原理:像素世界的侦探故事
前端·javascript·计算机图形学
掘金安东尼29 分钟前
前端周刊第421期(2025年7月1日–7月6日)
前端·面试·github
摸鱼仙人~32 分钟前
深入理解 classnames:React 动态类名管理的最佳实践
前端·react.js·前端框架
未来之窗软件服务34 分钟前
chrome webdrive异常处理-session not created falled opening key——仙盟创梦IDE
前端·人工智能·chrome·仙盟创梦ide·东方仙盟·数据调式
kymjs张涛34 分钟前
零一开源|前沿技术周报 #6
前端·ios·harmonyos
玲小珑38 分钟前
Next.js 教程系列(十)getStaticPaths 与动态路由的静态生成
前端·next.js
天天鸭44 分钟前
写个vite插件自动处理系统权限,降低99%重复工作
前端·javascript·vite