JSX 语法与基础组件使用
在 React Native 中,JSX 是一种 JavaScript 的语法扩展,用于描述 UI 界面。JSX 语法类似于 HTML,但它是 JavaScript 的语法糖,可以直接在 JavaScript 代码中编写 UI 组件。本章节将介绍 JSX 语法的基础知识,以及 React Native 中常用的基础组件。
1. JSX 语法简介
JSX (JavaScript XML) 是 React 引入的一种语法扩展,允许开发者在 JavaScript 代码中直接编写类似 HTML 的标签,从而更直观地描述 UI 结构。
JSX 的特点:
- 声明式语法: 开发者可以直观地描述 UI 的结构和样式。
- 与 JavaScript 混用: 可以在 JSX 中嵌入 JavaScript 表达式,使用花括号
{}
包裹。 - 组件化: JSX 用于定义 React 组件,组件可以嵌套组合,构建复杂的 UI。
示例:
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';const App = () => {const name = '张三';return (<View style={styles.container}><Text style={styles.text}>Hello, {name}!</Text></View>);
};const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},text: {fontSize: 20,color: '#333',},
});export default App;
在上述代码中,<View>
和 <Text>
是 JSX 标签,分别对应 React Native 的 View 和 Text 组件。{name}
是一个 JavaScript 表达式,用于动态渲染变量值。
注意事项:
- JSX 标签必须正确闭合。
- 组件名称首字母必须大写,例如
<View>
而不是<view>
。 - JSX 中不能使用
class
属性,应使用className
(在 React 中)或style
(在 React Native 中)代替。
2. React Native 基础组件
React Native 提供了丰富的内置组件,用于构建移动应用的 UI。以下是一些常用的基础组件:
2.1 View
<View>
组件类似于 HTML 中的 <div>
,用于布局和容器。
示例:
<View style={styles.container}><Text>Hello, World!</Text>
</View>
2.2 Text
<Text>
组件用于显示文本内容。
示例:
<Text style={styles.text}>Hello, React Native!</Text>
2.3 Image
<Image>
组件用于显示图片。
示例:
<Imagesource={{ uri: 'https://example.com/image.png' }}style={styles.image}
/>
2.4 TextInput
<TextInput>
组件用于用户输入文本。
示例:
<TextInputstyle={styles.input}placeholder="请输入内容"onChangeText={(text) => setText(text)}
/>
2.5 ScrollView
<ScrollView>
组件用于可滚动的视图。
示例:
<ScrollView><Text>内容1</Text><Text>内容2</Text><Text>内容3</Text>{/* 更多内容 */}
</ScrollView>
2.6 FlatList
<FlatList>
组件用于高性能的列表渲染,适用于长列表。
示例:
const data = [{ id: '1', title: 'Item 1' },{ id: '2', title: 'Item 2' },// 更多数据
];<FlatListdata={data}renderItem={({ item }) => <Text>{item.title}</Text>}keyExtractor={(item) => item.id}
/>
2.7 TouchableOpacity
<TouchableOpacity>
组件用于处理用户点击事件。
示例:
<TouchableOpacity onPress={() => console.log('Button Pressed')}><Text>Press Me</Text>
</TouchableOpacity>
2.8 StyleSheet
<StyleSheet>
用于定义组件的样式。
示例:
const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},text: {fontSize: 20,color: '#333',},
});
3. JSX 语法进阶
3.1 条件渲染
在 JSX 中,可以使用 JavaScript 表达式进行条件渲染。
示例:
const isLoggedIn = true;return (<View>{isLoggedIn ? <Text>Welcome back!</Text> : <Text>Please log in.</Text>}</View>
);
3.2 列表渲染
可以使用 map
方法渲染列表数据。
示例:
const items = ['苹果', '香蕉', '橘子'];return (<View>{items.map((item, index) => (<Text key={index}>{item}</Text>))}</View>
);
3.3 样式传递
可以通过 props 传递样式,实现组件样式的动态调整。
示例:
const Box = ({ style }) => <View style={[styles.box, style]} />;const styles = StyleSheet.create({box: {width: 100,height: 100,backgroundColor: '#f0f0f0',},
});
4. 综合示例
以下是一个综合示例,展示了如何使用 JSX 和基础组件构建一个简单的登录页面。
import React, { useState } from 'react';
import { View, Text, TextInput, TouchableOpacity, StyleSheet, Image } from 'react-native';const LoginScreen = () => {const [username, setUsername] = useState('');const [password, setPassword] = useState('');const handleLogin = () => {console.log('Username:', username);console.log('Password:', password);};return (<View style={styles.container}><Imagesource={{ uri: 'https://example.com/logo.png' }}style={styles.logo}/><Text style={styles.title}>登录</Text><TextInputstyle={styles.input}placeholder="用户名"value={username}onChangeText={(text) => setUsername(text)}/><TextInputstyle={styles.input}placeholder="密码"secureTextEntryvalue={password}onChangeText={(text) => setPassword(text)}/><TouchableOpacity style={styles.button} onPress={handleLogin}><Text style={styles.buttonText}>登录</Text></TouchableOpacity></View>);
};const styles = StyleSheet.create({container: {flex: 1,padding: 20,justifyContent: 'center',backgroundColor: '#fff',},logo: {width: 100,height: 100,alignSelf: 'center',marginBottom: 20,},title: {fontSize: 24,textAlign: 'center',marginBottom: 20,},input: {height: 40,borderColor: '#ccc',borderWidth: 1,borderRadius: 5,paddingHorizontal: 10,marginBottom: 10,},button: {backgroundColor: '#007bff',padding: 10,borderRadius: 5,alignItems: 'center',},buttonText: {color: '#fff',fontSize: 16,},
});export default LoginScreen;
总结
本章节介绍了 JSX 语法的基础知识和 React Native 中常用的基础组件。通过学习 JSX 语法,学员可以更直观地描述 UI 结构,并结合 React Native 组件构建复杂的移动应用界面。
课后作业
- 练习使用 JSX 语法,编写一个简单的组件,展示不同的 UI 元素。
- 熟悉 React Native 基础组件的使用,尝试实现一个包含文本、图片、输入框和按钮的页面。
- 阅读 React Native 官方文档,深入了解其他常用组件和属性。
导师指导
相关文章:

JSX 语法与基础组件使用
在 React Native 中,JSX 是一种 JavaScript 的语法扩展,用于描述 UI 界面。JSX 语法类似于 HTML,但它是 JavaScript 的语法糖,可以直接在 JavaScript 代码中编写 UI 组件。本章节将介绍 JSX 语法的基础知识,以及 React…...

ReactPress:构建高效、灵活、可扩展的开源发布平台
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 在当今数字化时代,内容管理系统(CMS)已成为各类网站和应用的核心组成部分。ReactPress,作为一款融合了现代Web开发多项先进技术的开…...
emulator总结
什么是硬件仿真器 做IC设计的人应该都知道软件仿真和FPGA原型验证,可以把硬件仿真器理解为这二者之间的产物,它同时具备二者的优点。 软件仿真(simulator)全面,支持UVM、assert、coverage收集、可以很方便的dump 波形…...

【Docker】‘docker‘ 不是内部或外部命令,也不是可运行的程序 或 批处理文件
在windows 电脑上安装了 Docker Desktop,在控制台输入 docker -v提示报错 ‘docker’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 报错原因是,环境变量没配置 解决办法,在系统环境变量中配置path ,重新打开cmd 或者…...

Mysql高可用架构方案
Mysql 介绍 Mysql是典型的开源关系型数据库,是许多网站、应用程序、企业软件产品的首选数据库。 Mysql特性: 易于使用,功能强大,支持事务、触发器、存储过程 管理工具多种多样且功能丰富 可以作为千万级数据管理的大型数据库 采…...

Go,15岁了[译]
请点击上方蓝字TonyBai订阅公众号! 虽然迟到了,但绝不缺席!新任Go技术负责人Austin Clements在Go语言15岁生日后的第二天,在Go官方博客上发表了庆祝文章“Go Turns 15[2]”。在这篇文章中,Austin回顾了过去一年Go项目和…...

【大数据学习 | kafka高级部分】kafka的数据同步和数据均衡
1. 数据同步 通过上图我们发现每个分区的数据都不一样,但是三个分区对外的数据却是一致的 这个时候如果第二个副本宕机了 但是如果是leader副本宕机了会发生什么呢? 2. 数据均衡 在线上程序运行的时候,有的时候因为上面副本的损坏ÿ…...
微擎框架php7.4使用phpexcel导出数据报错修复
在使用微擎社区版时,用phpexcel导出数据,提示错误,经过搜索后得知是php版本问题。 之前一直是用的5.6现在改成了7.4。所以才发现了这个问题。 然后去gitee上看了下微擎官方的代码,好像也没有对这个问题进行修复。 找了下&#…...

Netty实现WebSocket Server是否开启压缩深度分析
是否开启压缩会直接影响与客户端是否能够成功握手。 一、具体分析 通常客户端发起与Websocket连接一般是以下形式。 1)包含6个必要的Header Request Headers Sec-WebSocket-Version: 13 Sec-WebSocket-Key: Nlpc0kiHFjRom5/62lj8bA Connection: Upgrade Upgrade…...
【Xrdp联机Ubuntu20.04实用知识点补充】
简单归纳了Xrdp远程连接可能会出现的问题 文章目录 一、网络篇二、Ubuntu远程联机一段时间后莫名奇妙断开Ubuntu20.04禁用休眠配置禁用挂起配置 三、refresh界面频繁刷新四、Authentication is required to create a color profile参考文章总结 一、网络篇 ip addr show eth0接…...

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”
【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉” 零、报错 在使用DiskGenius对磁盘分区进行调整时,DiskGenius检查出磁盘报错,报错信息:文件使用的簇被标记为空闲或与其它文件有交叉,…...

IDC机房服务器托管的费用组成
IDC机房服务器托管的费用,并不是只有我们所想的电费而已,还有一些其它费用组成,详细来看: 1. 机位费用: - 机位费用是根据服务器的尺寸和占用的空间来计算的。服务器通常按照U(Unit)的高度来…...
Halcon深度学习网络模型简介
HALCON为分类和语义分割提供了预训练的神经网络。当训练自定义网络时,这些神经网络是很好的起点。它们已经在一个大型图像数据集上进行了预训练。对于异常检测,HALCON提供了初始模型。 用于 3D 抓取点检测的模型 为 3D 抓取点检测提供了以下网络…...

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析
在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…...

基于集成Whisper 与 Pepper-GPT改进人机交互体验并实现顺畅通信
摘要 随着技术以令人眼花缭乱的速度发展,使人机交互更加顺畅比以往任何时候都更加重要。为了应对这一挑战,一个新领域应运而生:人机交互(HRI)。有效的人机交互被认为是实现技术效益的关键。 用户体验(UX&…...
C++设计模式精选面试题及参考答案
目录 什么是单例模式?它的应用场景是什么?如何保证单例模式线程安全? 什么是工厂方法模式?如何与简单工厂模式进行比较? 抽象工厂模式和工厂方法模式有什么区别?请给出实际应用场景。 什么是建造者模式?它和工厂模式有什么不同? 在什么情况下使用单例模式?如何在…...

Linux下的vim和gdb
vim: vim是编译功能强大,多模式的编译器。实际中vim有很多种模式,但是常用的就三种模式: 1、正常/普通/命令模式(Normal mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下…...

(蓝桥杯C/C++)——搜索
一、回溯法 1.回溯法简介 回溯法一般使用 ** DFS(深度优先搜索) ** 实现,DFS是一种遍历或搜索图、树或图像等数据结构的算法,当然这个图、树未必要存储下来(隐式处理就是回溯法),常见的是通过某种关系构造出的搜索树,搜索树一般…...

【网页设计】HTML5 和 CSS3 提高
目标 能够说出 3~5 个 HTML5 新增布局和表单标签能够说出 CSS3 的新增特性有哪些 1. HTML5 的新特性 注:该部分所有内容可参考菜鸟教程菜鸟教程 - 学的不仅是技术,更是梦想! (runoob.com) HTML5 的新增特性主要是针对于以前的不足…...

FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
继这篇博客之后 从零开始FastGPT本地部署|Windows 有同学问,不想在多个平台申请API-Key,不好管理且要付费,有木有白嫖方案呀? 答:有啊。用硅基流动。 注册方法看这篇 【1024送福利】硅基流动送2000万token啦࿰…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...