【发布时间】:2020-10-28 11:05:06
【问题描述】:
我创建了一个自定义函数组件,它具有来自 NetInfo 的事件监听器用于 Internet 连接,它返回一个布尔值和方法名称。我想在每个类组件中调用该方法来检查互联网连接并使用布尔值来检查连接状态。
下面是我的代码。
//function Component
import React, { PureComponent, useEffect, useState } from 'react';
import NetInfo from "@react-native-community/netinfo";
export default () => {
const [isInternetReachable, setIsInternetReachable] = useState(false)
const InternetChecker = () => {
useEffect(() => {
// Subscribe
const unsubscribe = NetInfo.addEventListener((state) => {
setIsInternetReachable(state.isInternetReachable);
console.log("Connection type", state.type);
console.log("Is internet Reachable?", isInternetReachable);
});
return () => {
unsubscribe();
};
},[])
}
return [InternetChecker, isInternetReachable];
};
类组件试图访问 InternetChecker() 方法
class HomeScreen extends React.Component {
render() {
const { navigate } = this.props.navigation;
const [InternetChecker, isInternetReachable] = InternetHanlder();
// if (!isInternetReachable) {
// <NoNetworkSign />
// }
InternetChecker()
if (isInternetReachable){
console.log("Internet is Reachable");
} else {
console.log("No Internet Connection");
}
return (
<SafeAreaView style={styles.container}>
<View style={styles.container}>
</View>
</SafeAreaView>
)
};
当我尝试以上述方式访问时,我得到无效的钩子调用,只能从函数组件的主体内部调用钩子。我们如何从类组件中调用它。
任何帮助表示赞赏。
【问题讨论】:
-
那不是功能组件。如果有的话,它是一个自定义钩子(由其他钩子组成的钩子)。组件返回 jsx 并打算被渲染。您的函数不会返回任何可以呈现的内容,并且您还可以将其称为钩子。类组件中不能调用钩子,类组件中也不能调用调用钩子的函数。
标签: reactjs react-native-ios react-component react-native-community-netinfo