React Native组件导入异步JS工具函数时出现undefined问题
解决React Native工具函数导入后undefined的问题
从你贴的代码最后一行export functi...能看出来,核心问题应该是函数的导出语句没有写完,这直接导致组件导入时无法识别到正确的函数引用。下面给你一步步的解决方案:
1. 修正PremiumStatus.js的导出语法
你需要确保函数被正确导出,有两种常用的方式:
方式一:命名导出(推荐,适合多个工具函数的场景)
直接在函数定义前加上export关键字:
import * as InAppPurchase from 'react-native-iap'; import { AsyncStorage } from "react-native"; // 直接用export标记函数为可导出 export async function getPreviousPurchases() { let purchases; try { purchases = await InAppPurchase.getPurchaseHistory(); console.log("previous purchases: ", purchases); } catch (e) { console.warn(e); } return purchases; }
方式二:默认导出(适合单个核心函数的场景)
如果这个文件主要就是这个函数,可以用默认导出:
import * as InAppPurchase from 'react-native-iap'; import { AsyncStorage } from "react-native"; async function getPreviousPurchases() { let purchases; try { purchases = await InAppPurchase.getPurchaseHistory(); console.log("previous purchases: ", purchases); } catch (e) { console.warn(e); } return purchases; } // 导出为默认模块 export default getPreviousPurchases;
2. 在React Native组件中正确导入
根据你选择的导出方式,对应不同的导入写法:
如果是命名导出
// 注意要用花括号包裹函数名 import { getPreviousPurchases } from './PremiumStatus'; // 在组件中使用(比如在useEffect里调用) useEffect(() => { const fetchPurchases = async () => { const purchases = await getPreviousPurchases(); // 处理购买数据 }; fetchPurchases(); }, []);
如果是默认导出
// 不需要花括号,直接导入 import getPreviousPurchases from './PremiumStatus'; // 调用方式和上面一致 useEffect(() => { const fetchPurchases = async () => { const purchases = await getPreviousPurchases(); // 处理购买数据 }; fetchPurchases(); }, []);
额外排查点
- 确认文件路径是否正确:如果PremiumStatus.js不在当前组件的同级目录,要调整路径(比如
../utils/PremiumStatus)。 - 检查拼写:函数名
getPreviousPurchases是大小写敏感的,导出和导入时要完全一致。 - 确保react-native-iap已正确安装:可以运行
npm install react-native-iap或yarn add react-native-iap重新安装,RN 0.60+会自动链接,低版本可能需要手动链接。
内容的提问来源于stack exchange,提问作者Axel Kennedal
相关产品推荐
相关产品推荐

