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

