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

React Native中调用Context的setAppCompany提示“not a function”问题求助

React Native中调用Context的setAppCompany提示“not a function”问题求助

我来帮你排查这个问题!这种报错大概率是Context的配置或者使用环节出了小疏漏,你可以按照下面的步骤逐一检查:

  • 先确认Context的创建与导出是否正确
    你应该是单独创建了一个Context文件(比如AppContext.js)吧?一定要在创建Context的时候给setAppCompany设置一个默认的空函数,这样就算组件不小心没被Provider包裹,也不会直接报“not a function”的错,示例代码如下:

    import { createContext } from 'react';
    
    // 初始化Context的默认值
    const AppContext = createContext({
      appCompany: null,
      setAppCompany: () => {} // 这里的默认空函数很重要
    });
    
    export default AppContext;
    
  • 检查App.js里Provider的value传递是否正确
    你在App.js里肯定用useState定义了appCompany和对应的setAppCompany,关键是要把这两个都传给Provider的value属性,别漏了setAppCompany!给你一个正确的示例参考:

    import React, { useState } from 'react';
    import { NavigationContainer } from '@react-navigation/native';
    import AppContext from './AppContext'; // 记得替换成你实际的Context文件路径
    // 导入你的其他组件,比如主页面组件
    import HomeScreen from './screens/HomeScreen';
    
    export default function App() {
      // 定义状态和对应的setter函数
      const [appCompany, setAppCompany] = useState('默认公司');
    
      return (
        // 一定要把setAppCompany包含在value对象里
        <AppContext.Provider value={{ appCompany, setAppCompany }}>
          <NavigationContainer>
            <HomeScreen />
          </NavigationContainer>
        </AppContext.Provider>
      );
    }
    

    这里最容易犯的错就是:value里只传了appCompany,完全忘了把setAppCompany加进去,或者变量名拼错了(比如写成setappCompany大小写不对)。

  • 检查调用组件中使用Context的方式
    在要调用setAppCompany的组件里,确保正确导入Context,并用useContext获取,而且解构的时候变量名要和Provider里传的完全一致:

    import { useContext } from 'react';
    import AppContext from '../AppContext'; // 路径要对应
    import { Button } from 'react-native';
    
    function SomeComponent() {
      // 正确解构出setAppCompany
      const { setAppCompany } = useContext(AppContext);
    
      const handleUpdateCompany = () => {
        // 调用setter函数
        setAppCompany('测试公司名称');
      };
    
      return (
        <Button title="更新公司" onPress={handleUpdateCompany} />
      );
    }
    
    export default SomeComponent;
    

    这里要注意:别导入错了Context文件,也别把变量名写错(比如把setAppCompany写成setCompany)。

另外,你提供的App.js代码是截断的(只写到impor),如果上面的检查都没问题,建议你把完整的App.js代码和Context文件的代码贴出来,这样我能更精准地帮你定位问题!

备注:内容来源于stack exchange,提问作者Vivantt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:23:19