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

Mobx React Native报Cannot read property 'products' of undefined错误求助

问题排查:MobX中TypeError: Cannot read property 'products' of undefined

错误本质

这个错误的核心是useStores()返回了undefined,导致你尝试解构products时触发读取undefined属性的报错。

核心原因:缺少MobX Provider的上下文注入

你的代码没有在React组件树的根节点使用MobX的Provider包裹,导致MobXProviderContext未被注入任何值,useContext(MobXProviderContext)自然返回undefined,访问.rootStore就会出错。

修复步骤

1. 在根组件中配置Provider

找到你的App根组件(比如App.tsx),导入Provider和store,用Provider包裹整个应用:

import { Provider } from 'mobx-react';
import store from './stores';
import Home from './screens/Home';

function App() {
  return (
    // 把rootStore注入到Context中
    <Provider rootStore={store}>
      <Home />
      {/* 其他路由/组件 */}
    </Provider>
  );
}

export default App;

2. 验证useStores的正确性

你的useStores实现是正确的,但要确保Provider传入的key是rootStore,这样React.useContext(MobXProviderContext).rootStore才能拿到正确的RootStore实例:

// hooks/useStores.tsx 无需修改,保持原样
import React from 'react';
import { MobXProviderContext } from 'mobx-react';
import store from '@stores';

export const useStores = (): typeof store => {
    return React.useContext(MobXProviderContext).rootStore;
};

3. 修复useEffect的无限循环问题

你的Home.tsx中useEffect没有设置依赖项,会导致组件每次渲染都调用onInit(),触发无限循环,补充空依赖数组:

// screens/Home.tsx 修复后
import { useEffect } from 'react';
import { useStores } from '../hooks/useStores';

const Home = () => {
    const { products } = useStores();

    const onInit = () => {
        products.getProducts('Playstation5');
    };

    useEffect(() => {
        onInit();
    }, []); // 空数组确保只在组件挂载时执行一次

    return (
        // 你的组件JSX
    );
};

export default Home;

额外检查点

  • 确保所有使用useStores()的组件都在Provider的子树中(比如路由组件不能在Provider外面)
  • 验证stores/index.ts中的store实例是否正确创建(可以在stores/index.ts末尾加console.log(store)确认products属性存在)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:14