react-native - 使用 NetInfo 时自动调用 onPress - 本机反应
问题描述
NetInfo 用于检查连接,在 TouchableOpacity 的 onPress 中调用了一个 checkNetwork 函数。当按钮被点击一次时,checkNetwork 函数会在网络连接丢失时自动调用多次,而无需点击按钮,反之亦然。
请看这里的代码:
请看视频
export default class App extends React.Component {
checkNetwork = () => {
NetInfo.addEventListener((state) => {
if (state.isConnected) {
alert('isConnected');
} else {
alert('not connected');
}
});
};
render() {
return (
<View style={styles.container}>
<TouchableOpacity
activeOpacity={0.8}
onPress={()=> this.checkNetwork()}>
<Text>Check here</Text>
</TouchableOpacity>
</View>
);
}
}
解决方案
您不应在单击本身内声明事件侦听器,
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {alert: ''};
}
componentDidMount() {
NetInfo.addEventListener((state) => this.setState({ alert: state.isConnected ? 'isConnected' : 'not connected'})
}
checkNetwork = () => alert(this.state.alert)
render() {
return (
<View style={styles.container}>
<TouchableOpacity
activeOpacity={0.8}
onPress={()=> this.checkNetwork()}>
<Text>Check here</Text>
</TouchableOpacity>
</View>
);
}
}
尽管在您的情况下,事件侦听器并不完全适合按下按钮的 UI 行为的逻辑,所以我认为您可能想使用useNetInfo
import {useNetInfo} from "@react-native-community/netinfo";
class App extends React.Component {
checkNetwork = () => {
if (this.props.netInfo.isConnected) {
alert('isConnected');
} else {
alert('not connected');
}
});
};
...rest render...
}
export default () => <App netInfo={useNetInfo()} />
推荐阅读
- php - Wordpress 函数 wp_get_attatchment_url 不起作用
- c# - Microsoft Toolkit DataGrid 不刷新视图中的数据
- angular - 如何在 `table` 组件中插入 `thead` 组件?
- c# - 将 JSON 粘贴为不遵循 C# 命名约定的类
- highcharts - Highcharts,js 柱形图不会显示负值
- angular - 无法在字符串“sendUs”上创建属性“验证器”
- apache-kafka - KSQL 查询执行失败
- machine-learning - 使用 PyTorch 预测网格坐标序列
- java - 控制通过 Kubernetes 部署的 POD 的主机名
- java - 导航抽屉没有折叠,没有汉堡按钮