You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MobX提示injector store不可用,请求排查代码错误原因

解决MobX报错:Store 'ProviderStore' is not available!

我来帮你定位并解决这个问题,你的代码里有几个关键错误导致了这个报错:

核心问题分析

  • Provider的位置错误:MobX的<Provider>需要在**组件树的上层(比如根组件)**提供Store实例,而不是在需要注入Store的DetailsScreen组件内部嵌套使用。你现在的写法相当于在组件自己内部找Store,但此时上层并没有提供,所以报错。
  • 传递了Store类而非实例:你给<Provider>传递的是ProviderState类本身,而MobX需要的是这个类的实例对象。
  • 小拼写错误:props.ProviderState.naame里多了一个字母a,应该是name,这个后续也会导致渲染错误。

修复步骤

1. 在根组件中提供Store实例

首先,找到你的应用根组件(比如App.tsx),在这里创建ProviderState的实例,并通过MobX的Provider把它提供给整个组件树:

import { Provider } from 'mobx-react';
import { ProviderState } from './states/provider.state';
import { DetailsScreen } from './screens/DetailsScreen';

// 创建Store实例,这里可以传入初始的IUser数据(如果有)
const providerStore = new ProviderState({});

export default function App() {
  return (
    {/* 这里的key要和你inject的名字完全一致:'ProviderState' */}
    <Provider ProviderState={providerStore}>
      <DetailsScreen />
    </Provider>
  );
}

2. 修改DetailsScreen组件

移除组件内部的<Provider>,只保留注入和使用Store的逻辑,同时修正拼写错误:

import React, { useEffect } from 'react';
import { observer, inject } from 'mobx-react';
import { ProviderState } from './../states/provider.state';
import { API_URL } from './../../env.json';
// 建议定义props类型,代替any,提升类型安全性
interface DetailsScreenProps {
  ProviderState: ProviderState;
}

export const DetailsScreen = inject('ProviderState')(observer((props: DetailsScreenProps) => {
  useEffect(() => {
    const runEffects = async () => {
      const url = `${API_URL}/company/1`;
      // 注意:确保Http模块已经正确导入,不然这里会报错
      const res = await Http.get(url);
      props.ProviderState.setProvider(res);
    };
    runEffects();
  }, []);

  return (
    <View style={styles.body}>
      {/* 修复拼写错误:naame → name */}
      <MessageComponent textValue={props.ProviderState.name} />
    </View>
  );
}));

3. 确保装饰器配置正确(TypeScript环境)

如果你用的是TypeScript,需要在tsconfig.json中开启装饰器支持,否则@observable和@action会失效:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

总结

MobX的核心流程是:上层组件通过Provider提供Store实例 → 下层组件通过inject获取对应Store → 用observer包裹组件实现响应式更新。你之前的错误把Provider放在了需要注入的组件内部,并且传递了类而非实例,导致inject找不到对应的Store,调整后就能正常工作了。

内容的提问来源于stack exchange,提问作者MegaRoks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:12:54