RN Mobx makeAutoObservable 使用示例

makeAutoObservable 是 MobX 6 引入的一个函数,用于自动将对象的属性和方法转换为可观察的(observable)、动作(action)或计算属性(computed)。它简化了 MobX 的使用,减少了样板代码。

一、基本用法

import { makeAutoObservable } from "mobx";

class Store {
  count = 0;

  constructor() {
    makeAutoObservable(this);
  }

  increment() {
    this.count++;
  }

  decrement() {
    this.count--;
  }

  get doubleCount() {
    return this.count * 2;
  }
}

const store = new Store();
export default store;

解释

1. makeAutoObservable(this):

  • 在构造函数中调用 makeAutoObservable(this),它会自动将 Store 类的实例属性(如
    count)转换为可观察的状态。

  • 方法(如 increment 和 decrement)会自动被标记为动作(action)。

  • Getter 方法(如 doubleCount)会自动被标记为计算属性(computed)。

2. 可观察状态:

count 是一个可观察的状态,当它的值发生变化时,依赖它的组件或计算属性会自动更新。

3. 动作:

increment 和 decrement 是动作,它们用于修改状态。MobX 会确保这些修改是在事务中进行的,从而保证状态的一致性。

4. 计算属性:

doubleCount 是一个计算属性,它会根据 count 的值自动计算并返回 count * 2。计算属性是惰性的,只有在被访问时才会重新计算。

二、在另一个页面或组件中引用 MobX 的 store,通常需要以下步骤:

  1. 创建一个 MobX Store,并使用 makeAutoObservable 自动将属性和方法转换为可观察的。
  2. 在 React Native 组件中,使用 @observer 装饰器来订阅 MobX Store 的状态变化。

以下是一个完整的示例,展示如何在另一个页面或组件中引用和使用 store。

// CounterScreen.js
import React from "react";
import { View, Text, Button, StyleSheet } from "react-native";
import { observer } from "mobx-react"; // 导入 observer
import counterStore from "./store"; // 导入 store

// 使用 @observer 装饰器
@observer
class CounterScreen extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.text}>Count: {counterStore.count}</Text>
        <Text style={styles.text}>Double Count: {counterStore.doubleCount}</Text>
        <Button title="Increment" onPress={() => counterStore.increment()} />
        <Button title="Decrement" onPress={() => counterStore.decrement()} />
      </View>
    );
  }
}

// 样式
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
    marginBottom: 20,
  },
});

export default CounterScreen;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crazy程序猿2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值