当前位置: 首页 > news >正文

【React Natve】NetworkError 和 TouchableOpacity 组件

NetworkError公共组件

import SimpleLineIcons from "@expo/vector-icons/SimpleLineIcons";
import { StyleSheet, Text, View } from "react-native";export default function NetworkError() {return (<View style={styles.container}><SimpleLineIcons name={"drawer"} size={160} color={"#ddd"} /><Text style={styles.title}>抱歉,网络连接出错了!</Text></View>);
}const styles = StyleSheet.create({container: {flex: 1,backgroundColor: "#fff",alignItems: "center",justifyContent: "center",},title: {color: "#999",},
});
import { useEffect, useState } from "react";
import { StyleSheet, Text, View } from "react-native";
import NetworkError from "./components/shared/NetworkError";export default function App() {const [courses, setCourses] = useState([]);const [keyword, setKeyword] = useState("");const [error, setError] = useState(false);/*** 获取搜索接口课程数据* @returns { Promise<void> }*/const fetchData = async () => {try {const res = await fetch(`http://192.168.1.138/search?q=${keyword}`);const { data } = await res.json();setCourses(data.courses);console.log("获取到的数据是:", data.courses);} catch (error) {console.error("获取数据失败:", error);setError(true);}};useEffect(() => {fetchData();}, []);return (<View style={styles.container}>{error ? (<NetworkError />) : (<>{courses.map((course) => (<Text key={course.id}>{course.name}</Text>))}</>)}</View>);
}const styles = StyleSheet.create({container: {flex: 1,backgroundColor: "#fff",alignItems: "center",justifyContent: "center",},input: {height: 40,width: 300,margin: 12,padding: 10,borderWidth: 1,borderColor: "#ccc",borderRadius: 5,},
});

然后我们把后端服务停掉,然后接口请求肯定会报错,直接进入我们的自定义错误处理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里使用到的图标,都是 rn 内置的,无需安装,以下是使用方法和所有的图标:

https://docs.expo.dev/guides/icons/

https://oblador.github.io/react-native-vector-icons/

TouchableOpacity 组件

Button组件在iOSAndroid上的UI是不一致的。可以改用TouchableOpacity组件来开发。

这是一个点击后可以改变透明度的组件,与它类似的还有组件:

  • TouchableHighlight:点击后高亮
  • TouchableWithoutFeedback:点击后无反馈

这三个组件,使用方式都是一样的,只是在点击后,显示的有点小区别而已。

打开NetworkError.js,来引用一下:

import { TouchableOpacity } from 'react-native';

然后到提示信息下面,使用它:

<TouchableOpacity style={styles.reload} onPress={onReload}><Text style={styles.label}>重新加载</Text>
</TouchableOpacity>
  • 用起来非常简单,直接用它,包住Text组件就行了。

打开App,按钮的样子已经出来了。这个按钮,点击它,按住不放的时候,它会有个透明度的改变。

这里有一个需要注意点,onPress={onReload} onReload 要么直接写,要么写成箭头函数的形式 () => onReload() 。因为如果写成 onReload() 是函数的直接调用,不论是否点击,都会直接执行。所以,简写为 onReload ,需要传参时写为箭头函数。

http://www.lryc.cn/news/588482.html

相关文章:

  • 网络编程(TCP连接)
  • 代理模式详解:代理、策略与模板方法模式
  • 暑期自学嵌入式——Day02(C语言阶段)
  • PyTorch张量(Tensor)创建的方式汇总详解和代码示例
  • 如何降低AIGC的查重率?精选六个AIGC降重让论文更出色
  • 《每日AI-人工智能-编程日报》--2025年7月14日
  • Android Studio C++/JNI/Kotlin 示例 三
  • git项目,有idea文件夹,怎么去掉
  • Mybatis(黑马)
  • 网络传输过程
  • 理解Linux文件系统:从物理存储到统一接口
  • 小波变换 | 离散小波变换
  • 学习笔记——农作物遥感识别与大范围农作物类别制图的若干关键问题
  • rsyslog简单应用
  • Linux中的系统日志(Rsyslog)
  • 算法训练营day17 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • Linux —— A / 基础指令
  • 深入解析Hadoop YARN架构设计:从原理到实践
  • 019 进程控制 —— 进程程序替换
  • SpringMVC2
  • 力扣-138.随机链表的复制
  • 一分钟K线实时数据数据接口,逐笔明细数据接口,分时成交量数据接口,实时五档委托单数据接口,历史逐笔明细数据接口,历史分时成交量数据接口
  • 深入理解MyBatis延迟加载:原理、配置与实战优化
  • 美丽田园发布盈喜公告,预计净利增长超35%该咋看?
  • 现场设备无法向视频汇聚EasyCVR视频融合平台推流的原因排查与解决过程
  • CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG
  • 第十五节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - vue前端 生产部署
  • Laravel 中 chunk 分页漏掉数据?深度解析原因与解决方案
  • Unity3D + VS2022连接雷电模拟器调试
  • 4、qt窗口(沉淀中)