在 React-native 中检测 NativeModule 何时为 运行
Detect when a NativeModule is running in React-native
所以我在应用程序中使用了几个不同的 NativeModules(Android 和 iOS 特定的)来播放视频等。这意味着屏幕由本机代码接管,例如。 Java 或 Swift 及其各自的 ViewController 控制视图而不是 React-Native。
这一切都很好并且可以正常工作,但我确实需要检测 NativeModule 是否为 运行,例如。它的观点或 RN 的观点正在显示。
如果我使用 { useIsFocused } from '@react-navigation'
它无法检测到 NativeModule 何时接管视图,它总是说我激活 NativeModule 的视图是 inFocus。
与 { AppState } from 'react-native'
相同,它始终显示为 active
,即使本机视图被覆盖也是如此。
有人找到解决这个问题的方法吗?
- 确保以正确的方式处理应用状态。
- 您可以使用 RCTEventEmitter 发送事件并手动管理它们
- 使用回调或承诺并更改应用中的状态
如果您使用自己的自定义组件作为 NativeModule,那么您可以
- 在您的代码中声明一个布尔值 属性
isVisible
,并在您的组件初始化或销毁时分别将其设置为 true
或 false
。对于 iOS 中的 UIViewController
,您可以为此目的使用 viewWillAppear
和 viewWillDisappear
。
- 为
isVisible
属性 创建一个 getter 并将其导出到 Javascript。
你可以从这个 link 中得到帮助:
https://reactnative.dev/docs/native-modules-ios#export-a-native-method-to-javascript
- 从您的 React 本机代码内部调用 getter 以检查 NativeModule 是否在屏幕上可见。
所以我在应用程序中使用了几个不同的 NativeModules(Android 和 iOS 特定的)来播放视频等。这意味着屏幕由本机代码接管,例如。 Java 或 Swift 及其各自的 ViewController 控制视图而不是 React-Native。
这一切都很好并且可以正常工作,但我确实需要检测 NativeModule 是否为 运行,例如。它的观点或 RN 的观点正在显示。
如果我使用 { useIsFocused } from '@react-navigation'
它无法检测到 NativeModule 何时接管视图,它总是说我激活 NativeModule 的视图是 inFocus。
与 { AppState } from 'react-native'
相同,它始终显示为 active
,即使本机视图被覆盖也是如此。
有人找到解决这个问题的方法吗?
- 确保以正确的方式处理应用状态。
- 您可以使用 RCTEventEmitter 发送事件并手动管理它们
- 使用回调或承诺并更改应用中的状态
如果您使用自己的自定义组件作为 NativeModule,那么您可以
- 在您的代码中声明一个布尔值 属性
isVisible
,并在您的组件初始化或销毁时分别将其设置为true
或false
。对于 iOS 中的UIViewController
,您可以为此目的使用viewWillAppear
和viewWillDisappear
。 - 为
isVisible
属性 创建一个 getter 并将其导出到 Javascript。 你可以从这个 link 中得到帮助: https://reactnative.dev/docs/native-modules-ios#export-a-native-method-to-javascript - 从您的 React 本机代码内部调用 getter 以检查 NativeModule 是否在屏幕上可见。