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

MobX入门指南:快速上手状态管理库

在这里插入图片描述

一、什么是MobX

MobX 是一个状态管理库,它可以让你轻松地管理应用程序的状态,并且可以扩展和维护。它使用观察者模式来自动传播你的状态的变化到你的 React 组件。

二、安装及配置

  1. 安装 MobX 和 MobX-React:你可以使用 npm 或 yarn 安装这些库:
npm install mobx mobx-react-lite
# 或者
yarn add mobx mobx-react-lite
  1. 定义一个 Store:Store 是一个保存应用程序状态的对象。你可以使用 MobX 的 observable 装饰器来使 Store 的属性可观察。这里是一个例子:
import { observable, action } from 'mobx';
import axios from 'axios';class Store {@observable data = null;@observable loading = false;@actionasync fetchData() {this.loading = true;try {const response = await axios.get('https://api.example.com/data');this.data = response.data;} catch (error) {console.error(error);} finally {this.loading = false;}}
}const store = new Store();
export default store;

在这个例子中,fetchData 是一个异步的 action,它从 API 获取数据并将其存储在 data 可观察对象中。loading 可观察对象用于跟踪请求是否正在进行中。

三、在组件中使用

3.1 在class组件中使用

import React, { Component } from 'react';
import { observer } from 'mobx-react';
import store from './store';@observer
class MyComponent extends Component {render() {return (<div>{store.loading ? <p>加载中...</p> : <p>{store.data}</p>}<button onClick={() => store.fetchData()}>获取数据</button></div>);}
}export default MyComponent;

在这个例子中,@observer 装饰器被用来使组件在 loading 或 data 改变时重新渲染。当按钮被点击时,fetchData action 被调用。

3.1 在函数式组件中使用

import React from 'react';
import { useObserver } from 'mobx-react-lite';
import store from './store';const MyComponent = () => {return useObserver(() => (<div>{store.loading ? <p>加载中...</p> : <p>{store.data}</p>}<button onClick={() => store.fetchData()}>获取数据</button></div>));
};export default MyComponent;

在这个例子中,useObserver 钩子被用来使组件在 loadingdata 改变时重新渲染。当按钮被点击时,fetchData action 被调用。

更多细节参考中文文档:https://cn.mobx.js.org/

http://www.lryc.cn/news/340988.html

相关文章:

  • 技术洞察:Selenium WebDriver中Chrome, Edge, 和IE配置的关键区别
  • 使用自定义OCR提升UIE-X检测效果:结合PaddleOCR和UIE模型进行文档信息提取
  • 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
  • .net反射(Reflection)
  • P1278 单词游戏 简单搜索+玄学优化
  • 软考 - 系统架构设计师 - 数据架构真题
  • Ubuntu22.04下opencv4.9.0环境的搭建
  • Flask如何在后端实时处理视频帧在前端展示
  • 04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析
  • 论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents
  • 搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统
  • 线程和进程的区别(面试)
  • 抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集
  • 关联规则Apriori算法
  • 书生·浦语大模型全链路开源体系-第4课
  • HTML优化SEO
  • RabbitMQ-交换机
  • mapreduce中的MapTask工作机制(Hadoop)
  • 景区文旅剧本杀小程序亲子公园寻宝闯关系统开发搭建
  • 性能优化---webpack优化
  • YOLOv9改进策略 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
  • 贪心算法-跳跃游戏
  • sql知识总结二
  • VSCode和CMake实现C/C++开发
  • 【机器学习300问】74、如何理解深度学习中L2正则化技术?
  • C语言程序设计每日一练(4)
  • m4p转换mp3格式怎么转?3个Mac端应用~
  • 全国产化无风扇嵌入式车载电脑在车队管理嵌入式车载行业应用
  • 爬虫入门——Request请求
  • 创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸