React native 使用对本机appstate作出反应以检查联机和脱机用户

React native 使用对本机appstate作出反应以检查联机和脱机用户,react-native,React Native,我是React Native的新手,我正在React Native上开发消息应用程序。如果appState处于活动/非活动状态,并且具体位于哪个页面(在根目录/索引处),或者在登录主页后,它是否为全局状态,我如何实现更改用户联机/脱机状态的功能?在应用程序的所有页面中使用 提前感谢。React Native本身提供AppState,如果应用程序当前处于后台或处于活动状态,您可以在App.js中轻松查看。如果应用处于活动状态,则可以调用后端函数将联机状态设置为true。由于您在根文件(App.js

我是React Native的新手,我正在React Native上开发消息应用程序。如果appState处于活动/非活动状态,并且具体位于哪个页面(在根目录/索引处),或者在登录主页后,它是否为全局状态,我如何实现更改用户联机/脱机状态的功能?在应用程序的所有页面中使用


提前感谢。

React Native本身提供AppState,如果应用程序当前处于后台或处于活动状态,您可以在App.js中轻松查看。如果应用处于活动状态,则可以调用后端函数将联机状态设置为true。由于您在根文件(App.js)中执行此操作,因此侦听器可以跨所有文件工作

import React, { useRef, useState, useEffect } from "react";
import { AppState, StyleSheet, Text, View } from "react-native";

const AppStateExample = () => {
  const appState = useRef(AppState.currentState);
  const [appStateVisible, setAppStateVisible] = useState(appState.current);

  useEffect(() => {
    AppState.addEventListener("change", _handleAppStateChange);

    return () => {
      AppState.removeEventListener("change", _handleAppStateChange);
    };
  }, []);

  const _handleAppStateChange = (nextAppState) => {
    if (
      appState.current.match(/inactive|background/) &&
      nextAppState === "active"
    ) {
      // TODO SET USERS ONLINE STATUS TO TRUE
    } else {
     // TODO SET USERS ONLINE STATUS TO FALSE
    }

    appState.current = nextAppState;
    setAppStateVisible(appState.current);
    console.log("AppState", appState.current);
  };

  return (
    <View style={styles.container}>
      <Text>Current state is: {appStateVisible}</Text>
    </View>
  );
};
import React,{useRef,useState,useffect}来自“React”;
从“react native”导入{AppState、样式表、文本、视图};
常量AppStateExample=()=>{
const-appState=useRef(appState.currentState);
const[appStateVisible,setAppStateVisible]=useState(appState.current);
useffect(()=>{
AppState.addEventListener(“更改”,即handleAppStateChange);
return()=>{
AppState.removeEventListener(“更改”,_handleAppStateChange);
};
}, []);
const\u handleAppStateChange=(nextapstate)=>{
如果(
appState.current.match(/inactive | background/)&&
nextAppState==“活动”
) {
//TODO将用户联机状态设置为TRUE
}否则{
//TODO将用户联机状态设置为FALSE
}
appState.current=nextapstate;
setAppStateVisible(appState.current);
log(“AppState”,AppState.current);
};
返回(
当前状态为:{appStateVisible}
);
};

感谢您的时间。谢谢,不客气。如果你的问题已经得到回答,请不要忘记将其标记为答案。谢谢!