【问题标题】:Using @react-native-community/netinfo in a class, possible?在课堂上使用@react-native-community/netinfo,可能吗?
【发布时间】:2020-05-19 22:31:51
【问题描述】:

我正在尝试向我的应用程序添加一个功能,以添加一个视图,向用户表明他已与 Internet 网络断开连接。

所以我去了@react-native-community/netinfo 进行设置,但我很快发现自己遇到了使用钩子的困难和相关错误:“Invalid hook call. Hooks can only be called inside of the body of a function component”。

那么如何在基于类的应用程序上集成@react-native-community/netinfo?

我想在检测到连接状态更改时更改应用程序的状态,以显示或不显示指示断开状态的视图。

非常感谢您的帮助!

这是我用于测试的内容:

【问题讨论】:

    标签: react-native hook react-native-community-netinfo


    【解决方案1】:

    我猜(从错误消息中)您在类本身中声明了侦听器,这是错误的。

    只需将监听器声明移动到 componentDidMount 钩子并在 componentWillUnmount 钩子中取消订阅,它应该可以正常工作。

    如果您需要完整的示例,请发表评论,我会提供给您。干杯

    【讨论】:

    • 感谢您的回复,对我的延误深表歉意!经过几次尝试,我终于设法使用您的解决方案实现了我的目标。谢谢!
    • @Tarik Chakur 如果你能分享一个例子,那就太好了
    【解决方案2】:

    库中有一个可以开箱即用的钩子,称为 useNetInfo(),您可以像这样使用它:

    编辑:

    您可以阅读this answer 以将此挂钩用于基于类的应用程序。这类似于 netInfo。

    Example from git, react-native-community

    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>
      );
    };
    

    编辑 2:

    完整示例:

    import React from 'react'
    import { SafeAreaView, Text } from 'react-native'
    import { useNetInfo } from '@react-native-community/netinfo'
    
    export default class Home extends React.Component {
    
        constructor(props) {
            super(props)
            this.state = {
                netInfo: undefined
            }
        }
    
        setNetInfo = netInfo => {
            this.setState({netInfo})
        }
    
        render () {
    
            return (
                <SafeAreaView>
                    <SetNetInfo setNetInfo={this.setNetInfo} />
                    <Text>Hello world</Text>
                </SafeAreaView>
            )
        }
    
    }
    
    const SetNetInfo = ({ setNetInfo }) => {
        const netInfo = useNetInfo()
    
        React.useEffect(() => {
            setNetInfo(netInfo)
        },[netInfo])
    
        return null
    }
    

    【讨论】:

    • 感谢您的回复!我终于找到了另一个解决方案,但我真的很感谢你花时间发布你的例子,我很确定我会在之后使用它们,特别是如果我想显示一个清晰的登录状态:)
    猜你喜欢
    • 2019-11-10
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2020-03-21
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多