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

詳細講一下mobx的在ReactNative中的用法,包含下載,配置。

1.安装依赖

# 安装 MobX 核心包和 React 绑定
npm install mobx mobx-react-lite

# 如果使用装饰器语法(可选)
npm install --save-dev @babel/plugin-proposal-decorators

2.配置 Babel(如果使用装饰器):

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    // 启用装饰器语法
    ['@babel/plugin-proposal-decorators', { legacy: true }]
  ]
};

3.创建 Store:

import { makeAutoObservable, runInAction } from 'mobx';

class CounterStore {
  // 定义可观察状态
  count = 0;
  loading = false;

  constructor() {
    // 使所有属性和方法可观察
    makeAutoObservable(this);
  }

  // action:修改状态的方法
  increment = () => {
    this.count += 1;
  };

  // action:减少计数
  decrement = () => {
    this.count -= 1;
  };

  // 异步 action
  async fetchInitialCount() {
    this.loading = true;
    try {
      const response = await fetch('https://api.example.com/count');
      const data = await response.json();
      
      // 在异步操作中修改状态需要使用 runInAction
      runInAction(() => {
        this.count = data.count;
        this.loading = false;
      });
    } catch (error) {
      runInAction(() => {
        this.loading = false;
      });
    }
  }

  // computed:计算属性
  get doubleCount() {
    return this.count * 2;
  }
}

// 创建并导出 store 实例
export const counterStore = new CounterStore();

4.创建 Root Store(可选,用于管理多个 store):

import { counterStore } from './counterStore';
import { userStore } from './userStore';

class RootStore {
  counterStore;
  userStore;

  constructor() {
    this.counterStore = counterStore;
    this.userStore = userStore;
  }
}

export const rootStore = new RootStore();

5.创建 Store Context:

import { createContext, useContext } from 'react';
import { rootStore } from './rootStore';

// 创建 Context
export const StoreContext = createContext(rootStore);

// 创建 Hook 用于获取 store
export const useStore = () => {
  const store = useContext(StoreContext);
  if (!store) {
    throw new Error('useStore must be used within StoreProvider');
  }
  return store;
};

6.配置 Provider:

import { StoreContext } from './stores/StoreContext';
import { rootStore } from './stores/rootStore';

const App = () => {
  return (
    <StoreContext.Provider value={rootStore}>
      <NavigationContainer>
        {/* 你的应用组件 */}
      </NavigationContainer>
    </StoreContext.Provider>
  );
};

7.在组件中使用:

import { observer } from 'mobx-react-lite';
import { useStore } from '../stores/StoreContext';

// observer 使组件响应 store 的变化
export const Counter = observer(() => {
  // 获取 store
  const { counterStore } = useStore();

  return (
    <View>
      {/* 显示加载状态 */}
      {counterStore.loading ? (
        <ActivityIndicator />
      ) : (
        <>
          {/* 显示计数 */}
          <Text>Count: {counterStore.count}</Text>
          {/* 显示双倍计数 */}
          <Text>Double Count: {counterStore.doubleCount}</Text>
          
          {/* 按钮操作 */}
          <Button 
            title="+" 
            onPress={counterStore.increment} 
          />
          <Button 
            title="-" 
            onPress={counterStore.decrement} 
          />
          
          {/* 异步操作 */}
          <Button 
            title="Fetch Count" 
            onPress={() => counterStore.fetchInitialCount()} 
          />
        </>
      )}
    </View>
  );
});

8. MobX 的关键概念:

  • observable:可观察的状态
  • action:修改状态的方法
  • computed:计算属性
  • observer:响应状态变化的组件包装器
  • runInAction:在异步操作中安全地修改状态

http://www.kler.cn/a/515112.html

相关文章:

  • Lsky-Pro在线图片搭建教程(Docker部署方式)
  • transformers使用过程问题
  • 第3天:阿里巴巴微服务解决方案概览
  • React 表单处理与网络请求封装详解[特殊字符][特殊字符]
  • 什么是报文的大端和小端,有没有什么记忆口诀?
  • 基础jjj
  • java开发常用指令整理
  • 【jmeter】下载及使用教程【mac】
  • .NET Framework
  • 【Elasticsearch】RestClient操作文档
  • 数据库-多表查询
  • git远程仓库如何修改
  • 简单排序算法
  • MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍
  • 手机版扫描王导出 PDF、快速文本识别工具扫描纸张
  • 9. 神经网络(一.神经元模型)
  • 5.SQLAlchemy对两张有关联关系表查询
  • IM系统设计
  • 4.JoranConfigurator解析logbak.xml
  • IDEA中将String类型转json格式
  • 学python的第四天:输入(重制版)
  • 如何使用Python脚本将本地项目上传到 GitHub
  • C语言练习(19)
  • 学习笔记——动态规划
  • Math Reference Notes: 反函数
  • 第一讲 方程组的几何解释——以列向量线性组合的角度看方程组