_reactNativeHealth.default.initHealthKit is not a function (it is undefined) 报错

React Native HealthKit 初始化报错。

按照官方文档安装的。
但是一执行官方的demo,就报错了。

_reactNativeHealth.default.initHealthKit is not a function (it is undefined)

我真无语了,这怎么跑个官方例子都能报错的。

发现有人在这里提到了 遇到一样的错误: https://github.com/agencyenterprise/react-native-health/issues/404

rn最近某个版本改了机制,lazyload modules,导致require('react-native').NativeModules 得到的是个{}对象,所以react-native-health库里export的AppleHealthKit定义在运行时不完整。

打开 node_modules/react-native-health/index.js ,可以看到确实是这样。

按照帖子里别人给的代码,我还是不成功,根据原理,然后我是临时先把需要的函数手动都获取一下,就有定义了。

临时解决,我就把它们都cue一下,就好了,反正先这样。等官方解决。
修改后的临时方案是这样:


import { Activities, Observers, Permissions, Units } from './src/constants'

const { AppleHealthKit } = require('react-native').NativeModules

const Kit = {
  initHealthKit: AppleHealthKit["initHealthKit"],
  isAvailable: AppleHealthKit["isAvailable"],
  getBiologicalSex: AppleHealthKit["getBiologicalSex"],
  getBloodType: AppleHealthKit["getBloodType"],
  getDateOfBirth: AppleHealthKit["getDateOfBirth"],
  getLatestWeight: AppleHealthKit["getLatestWeight"],
  getWeightSamples: AppleHealthKit["getWeightSamples"],
  saveWeight: AppleHealthKit["saveWeight"],
  getLatestHeight: AppleHealthKit["getLatestHeight"],
  getHeightSamples: AppleHealthKit["getHeightSamples"],
  saveHeight: AppleHealthKit["saveHeight"],
  getLatestWaistCircumference: AppleHealthKit["getLatestWaistCircumference"],
  getWaistCircumferenceSamples: AppleHealthKit["getWaistCircumferenceSamples"],
  saveWaistCircumference: AppleHealthKit["saveWaistCircumference"],
  getLatestPeakFlow: AppleHealthKit["getLatestPeakFlow"],
  getPeakFlowSamples: AppleHealthKit["getPeakFlowSamples"],
  savePeakFlow: AppleHealthKit["savePeakFlow"],
  saveLeanBodyMass: AppleHealthKit["saveLeanBodyMass"],
  getLatestBmi: AppleHealthKit["getLatestBmi"],
  getBmiSamples: AppleHealthKit["getBmiSamples"],
  saveBmi: AppleHealthKit["saveBmi"],
  getLatestBodyFatPercentage: AppleHealthKit["getLatestBodyFatPercentage"],
  getBodyFatPercentageSamples: AppleHealthKit["getBodyFatPercentageSamples"],
  getLatestLeanBodyMass: AppleHealthKit["getLatestLeanBodyMass"],
  getLeanBodyMassSamples: AppleHealthKit["getLeanBodyMassSamples"],
  getStepCount: AppleHealthKit["getStepCount"],
  getSamples: AppleHealthKit["getSamples"],
  getAnchoredWorkouts: AppleHealthKit["getAnchoredWorkouts"],
  getDailyStepCountSamples: AppleHealthKit["getDailyStepCountSamples"],
  saveSteps: AppleHealthKit["saveSteps"],
  saveWalkingRunningDistance: AppleHealthKit["saveWalkingRunningDistance"],
  getDistanceWalkingRunning: AppleHealthKit["getDistanceWalkingRunning"],
  getDailyDistanceWalkingRunningSamples: AppleHealthKit["getDailyDistanceWalkingRunningSamples"],
  getDistanceCycling: AppleHealthKit["getDistanceCycling"],
  getDailyDistanceCyclingSamples: AppleHealthKit["getDailyDistanceCyclingSamples"],
  getFlightsClimbed: AppleHealthKit["getFlightsClimbed"],
  getDailyFlightsClimbedSamples: AppleHealthKit["getDailyFlightsClimbedSamples"],
  getEnergyConsumedSamples: AppleHealthKit["getEnergyConsumedSamples"],
  getProteinSamples: AppleHealthKit["getProteinSamples"],
  getFiberSamples: AppleHealthKit["getFiberSamples"],
  getTotalFatSamples: AppleHealthKit["getTotalFatSamples"],
  saveFood: AppleHealthKit["saveFood"],
  saveWater: AppleHealthKit["saveWater"],
  getWater: AppleHealthKit["getWater"],
  saveHeartRateSample: AppleHealthKit["saveHeartRateSample"],
  getWaterSamples: AppleHealthKit["getWaterSamples"],
  getHeartRateSamples: AppleHealthKit["getHeartRateSamples"],
  getRestingHeartRate: AppleHealthKit["getRestingHeartRate"],
  getWalkingHeartRateAverage: AppleHealthKit["getWalkingHeartRateAverage"],
  getActiveEnergyBurned: AppleHealthKit["getActiveEnergyBurned"],
  getBasalEnergyBurned: AppleHealthKit["getBasalEnergyBurned"],
  getAppleExerciseTime: AppleHealthKit["getAppleExerciseTime"],
  getAppleStandTime: AppleHealthKit["getAppleStandTime"],
  getVo2MaxSamples: AppleHealthKit["getVo2MaxSamples"],
  getBodyTemperatureSamples: AppleHealthKit["getBodyTemperatureSamples"],
  getBloodPressureSamples: AppleHealthKit["getBloodPressureSamples"],
  getRespiratoryRateSamples: AppleHealthKit["getRespiratoryRateSamples"],
  getHeartRateVariabilitySamples: AppleHealthKit["getHeartRateVariabilitySamples"],
  getHeartbeatSeriesSamples: AppleHealthKit["getHeartbeatSeriesSamples"],
  getRestingHeartRateSamples: AppleHealthKit["getRestingHeartRateSamples"],
  getBloodGlucoseSamples: AppleHealthKit["getBloodGlucoseSamples"],
  getCarbohydratesSamples: AppleHealthKit["getCarbohydratesSamples"],
  saveBloodGlucoseSample: AppleHealthKit["saveBloodGlucoseSample"],
  saveCarbohydratesSample: AppleHealthKit["saveCarbohydratesSample"],
  deleteBloodGlucoseSample: AppleHealthKit["deleteBloodGlucoseSample"],
  deleteCarbohydratesSample: AppleHealthKit["deleteCarbohydratesSample"],
  getSleepSamples: AppleHealthKit["getSleepSamples"],
  getInfo: AppleHealthKit["getInfo"],
  getMindfulSession: AppleHealthKit["getMindfulSession"],
  saveMindfulSession: AppleHealthKit["saveMindfulSession"],
  getWorkoutRouteSamples: AppleHealthKit["getWorkoutRouteSamples"],
  saveWorkout: AppleHealthKit["saveWorkout"],
  getAuthStatus: AppleHealthKit["getAuthStatus"],
  getLatestBloodAlcoholContent: AppleHealthKit["getLatestBloodAlcoholContent"],
  getBloodAlcoholContentSamples: AppleHealthKit["getBloodAlcoholContentSamples"],
  saveBloodAlcoholContent: AppleHealthKit["saveBloodAlcoholContent"],
  getDistanceSwimming: AppleHealthKit["getDistanceSwimming"],
  getDailyDistanceSwimmingSamples: AppleHealthKit["getDailyDistanceSwimmingSamples"],
  getOxygenSaturationSamples: AppleHealthKit["getOxygenSaturationSamples"],
  getElectrocardiogramSamples: AppleHealthKit["getElectrocardiogramSamples"],
  saveBodyFatPercentage: AppleHealthKit["saveBodyFatPercentage"],
  saveBodyTemperature: AppleHealthKit["saveBodyTemperature"],
  getEnvironmentalAudioExposure: AppleHealthKit["getEnvironmentalAudioExposure"],
  getHeadphoneAudioExposure: AppleHealthKit["getHeadphoneAudioExposure"],
  getClinicalRecords: AppleHealthKit["getClinicalRecords"],
  getActivitySummary: AppleHealthKit["getActivitySummary"],
  getInsulinDeliverySamples: AppleHealthKit["getInsulinDeliverySamples"],
  saveInsulinDeliverySample: AppleHealthKit["saveInsulinDeliverySample"],
  deleteInsulinDeliverySample: AppleHealthKit["deleteInsulinDeliverySample"],
}
// console.log("AppleHealthKit: ",AppleHealthKit, "Kit=", Kit);


export const HealthKit = Object.assign({}, AppleHealthKit, {
  Constants: {
    Activities,
    Observers,
    Permissions,
    Units,
  },
})

module.exports = HealthKit

技术内容转载请注明来源,个人日记不允许转载,欢迎指出任何有错误或不够清晰的表达。可以邮件至 mousebomb@gmail.com