MobX使用杂文

1. 导入 React 和 MobX 相关模块

import React, { createContext, useContext } from 'react';
import RootStore from './RootStore';
  • React: 引入 React 库。
  • createContextuseContext: React 提供的用于创建和使用上下文的钩子。
  • RootStore: 你之前定义的 MobX 根 store,它包含了所有子 store 的实例。

2. 创建一个上下文

const StoreContext = createContext(new RootStore());
  • createContext: 创建一个新的上下文对象 StoreContext
  • new RootStore(): 创建 RootStore 的一个实例,并将其作为上下文的默认值。

3. 上下文的作用

上下文的作用是使 RootStore 实例可以在应用的任何地方被访问,而不需要通过层层的 props 传递。通过上下文,你可以在任何组件中使用 useContext 钩子来获取 RootStore 实例。

使用示例

创建 StoreProvider 组件

你可以创建一个 StoreProvider 组件,用于将 StoreContext 提供给整个应用:

export const StoreProvider = ({ children }) => {
  return (
    <StoreContext.Provider value={new RootStore()}>
      {children}
    </StoreContext.Provider>
  );
};
  • StoreProvider: 自定义的上下文提供者组件。
  • children: 这个组件的子组件。
使用 useStore 钩子

为了方便在组件中使用上下文,你可以创建一个自定义钩子 useStore

export const useStore = () => useContext(StoreContext);
  • useStore: 自定义的钩子,它使用 useContext 来获取 StoreContext 的值,即 RootStore 实例。
在组件中使用

在任何需要访问 RootStore 的组件中,你可以使用 useStore 钩子:

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

const SomeComponent = observer(() => {
  const { productStore, cartStore } = useStore();

  // 你可以在这里使用 productStore 和 cartStore 的方法和属性
  return (
    <div>
      {/* 组件内容 */}
    </div>
  );
});

export default SomeComponent;

mobx-reactmobx-react-lite 都是用于在 React 应用中集成 MobX 的库,但它们有一些关键区别:

mobx-react

  • 功能:提供装饰器(decorators)、Providerinject 和其他高阶组件(HOCs)。
  • 支持的组件类型:支持类组件和函数组件。
  • 适用场景:适合需要更多高级特性的大型应用,如基于上下文的注入和高阶组件。

mobx-react-lite

  • 功能:主要基于 React Hooks 的简化版,不支持装饰器和高阶组件。
  • 支持的组件类型:主要支持函数组件。
  • 适用场景:适合现代 React 应用,尤其是那些使用 hooks 并且希望使用更轻量级解决方案的项目。

主要区别

  • 体积mobx-react-lite 更小、更轻量。
  • APImobx-react 支持类组件和函数组件,而 mobx-react-lite 主要关注函数组件和 hooks。
  • 装饰器mobx-react 支持装饰器,而 mobx-react-lite 不支持。

示例代码

mobx-react
import { observer, inject } from 'mobx-react';

@inject('store')
@observer
class MyComponent extends React.Component {
  render() {
    const { store } = this.props;
    return <div>{store.someValue}</div>;
  }
}
mobx-react-lite
import { observer } from 'mobx-react-lite';
import { useStore } from './storeContext';

const MyComponent = observer(() => {
  const store = useStore();
  return <div>{store.someValue}</div>;
});

根据项目的复杂度和需求选择合适的库。对于新项目,通常推荐使用 mobx-react-lite,因为它更简单且符合现代 React 的开发方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薛飞之

感激不尽

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

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

打赏作者

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

抵扣说明:

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

余额充值