订阅和取消订阅本机netinfo的正确方式

gwo2fgha  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(340)

根据此处的文档,订阅和取消订阅netinfo listener-https://github.com/react-native-netinfo/react-native-netinfo
我在公共文件中定义侦听器方法并将其导出

/* util.js */
function listener(){
  Netinfo.addEventListener(state => /* something in here */);
}

export { listener };

然后在一个React组分中

import { useEffect } from 'react';
import { listener } from 'util';

const exampleComponent = props => {

  // then on useeffect
  useEffect(() => {
    listener() // to subscribe

    return () => listener(); // to unsubscribe
  }, []);

  return <ExampleComponent />
}

如果我想让listener成为可以在任何地方设置的可导出方法(虽然从逻辑上讲,它应该只在应用程序的主文件上设置,但只是为了提问),那么这是设置netinfo listener的正确方法吗?
我不知道怎么打电话 listener 第一次将订阅netinfo侦听器,再次调用将取消订阅。

xt0899hw

xt0899hw1#

你可以试试这个,

import NetInfo from "@react-native-community/netinfo";

    const [isConnected, setIsConnected] = useState(true);

    NetInfo.fetch().then(state => {
            if (state.isConnected && state.isInternetReachable) {
                setIsConnected(true);
            } else {
                setIsConnected(false);
            }
        });

    useEffect(() => {
            const unsubscribe = NetInfo.addEventListener(state => {
                if (state.isConnected && state.isInternetReachable) {
                    setIsConnected(true);
                } else {
                    setIsConnected(false);
                }
            });
            if (isConnected) {

            } else {
                unsubscribe();
            }
        }, []);
hjzp0vay

hjzp0vay2#

如果我想让listener成为可以在任何地方设置的可导出方法(虽然从逻辑上讲,它应该只在应用程序的主文件上设置,但只是为了提问),那么这是设置netinfo listener的正确方法吗?
如果您想设置一次并多次使用它,则无需自己进行设置,您可以使用usenetinfo()

import {useNetInfo} from "@react-native-community/netinfo";

const YourComponent = () => {

  const netInfo = useNetInfo();

  return (
    <View>
      <Text>Type: {netInfo.type}</Text>
      <Text>Is Connected? {netInfo.isConnected.toString()}</Text>
    </View>
  );
};

相关问题