使用rn-apple-healthkit遇Eslint报错:AppleHealthkit未定义
看起来你遇到的问题大概率和导入语句不完整、Eslint配置或者模块链接有关,我给你整理几个排查和解决的步骤:
先补全你的导入语句
你提供的代码里import AppleHeal…明显是截断了,这肯定会导致变量未定义。根据rn-apple-healthkit的包规范,正确的导入应该是下面两种情况之一:
如果包用的是默认导出:import AppleHealthkit from 'rn-apple-healthkit';如果是命名导出的话(部分包会这么做):
import { AppleHealthkit } from 'rn-apple-healthkit';先把导入补全,这是最基础的一步。
配置Eslint识别全局变量(补全后仍报错的话)
要是你已经补全了导入,但Eslint还是揪着“未定义”不放,那可能是Eslint没把这个模块变量纳入合法范围。你可以在项目的.eslintrc.js(或者其他Eslint配置文件,比如.eslintrc.json)里添加全局变量配置:module.exports = { // 其他已有的配置项... globals: { AppleHealthkit: true } };这样Eslint就会把它当成合法的全局变量,不会再报错了。
检查模块链接和权限配置
如果你用的是React Native 0.60以下的版本,别忘了手动链接原生模块:react-native link rn-apple-healthkit另外不管哪个版本,都要在Xcode的
Info.plist里配置HealthKit的权限,添加NSHealthShareUsageDescription和NSHealthUpdateUsageDescription这两个键,填上对应的权限说明文字,不然不仅Eslint可能有问题,实际运行也会报错。把初始化代码放在合适的生命周期里
最后记得把initStepCountObserver的调用放在组件的生命周期方法里,比如componentDidMount,确保组件挂载后再执行初始化:componentDidMount() { AppleHealthkit.initStepCountObserver({}, () => { // 这里写你的回调逻辑 }); }
内容的提问来源于stack exchange,提问作者Alan Chao

