React Native 全栈开发实战班 :数据管理与状态之React Hooks 基础

在 React Native 应用中,数据管理与状态管理是构建复杂用户界面的关键。React 提供了多种工具和模式来处理数据流和状态管理,包括 React Hooks、Context API 以及第三方状态管理库(如 Redux)。本章节将详细介绍 React Hooks 的基础用法、组件间通信、状态管理入门以及异步数据处理和本地存储的实现。


1. React Hooks 基础

React Hooks 是 React 16.8 引入的新特性,允许开发者在函数组件中使用状态和其他 React 特性,而无需编写类组件。Hooks 提供了一种更简洁、更直观的方式来管理组件状态和副作用。

1.1 useState

useState 是最常用的 Hook,用于在函数组件中添加状态。

语法:

const [state, setState] = useState(initialState);
  • state:当前状态。
  • setState:更新状态的函数。
  • initialState:状态的初始值。

示例:

import React, { useState } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';const Counter = () => {const [count, setCount] = useState(0);return (<View style={styles.container}><Text style={styles.text}>Count: {count}</Text><Button title="Increment" onPress={() => setCount(count + 1)} /></View>);
};const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},text: {fontSize: 18,marginBottom: 10,},
});export default Counter;

解释:

  • useState(0) 初始化 count 状态为 0
  • setCount 用于更新 count 状态。
1.2 useEffect

useEffect 用于处理副作用,例如数据获取、订阅、手动操作 DOM 等。

语法:

useEffect(() => {// 副作用代码return () => {// 清理函数};
}, [dependencies]);
  • 第一个参数是副作用函数。
  • 第二个参数是依赖数组,指定副作用何时执行。

示例:

import React, { useState, useEffect } from 'react';
import { View, Text, StyleSheet } from 'react-native';const DataFetcher = () => {const [data, setData] = useState(null);useEffect(() => {fetch('https://example.com/api/data').then((response) => response.json()).then((json) => setData(json)).catch((error) => console.error(error));}, []);return (<View style={styles.container}>{data ? <Text style={styles.text}>{JSON.stringify(data)}</Text> : <Text>Loading...</Text>}</View>);
};const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},text: {fontSize: 16,},
});export default DataFetcher;

解释:

  • useEffect 在组件挂载时执行数据获取操作。
  • 空依赖数组 [] 表示副作用只在组件挂载和卸载时执行。
1.3 其他常用 Hooks
  • useContext: 接收一个 context 对象并返回当前 context 的值。
  • useReducer: 类似于 Redux 的 reducer,用于复杂的状态逻辑。
  • useCallback: 缓存函数,避免不必要的重新渲染。
  • useMemo: 缓存计算结果,避免不必要的重新计算。

示例:

import React, { useContext } from 'react';
import { View, Text, StyleSheet } from 'react-native';const MyContext = React.createContext();const ContextExample = () => {const value = useContext(MyContext);return (<View style={styles.container}><Text style={styles.text}>Context Value: {value}</Text></View>);
};const App = () => {return (<MyContext.Provider value="Hello, Context!"><ContextExample /></MyContext.Provider>);
};const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},text: {fontSize: 18,},
});export default App;

2. 组件间通信

在 React Native 应用中,组件间通信是实现复杂交互和状态共享的重要机制。以下是几种常见的组件间通信方式:

2.1 Props

通过组件的 props 属性传递数据。

示例:

import React from 'react';
import { View, Text, StyleSheet } from 'react-native';const Parent = () => {const message = 'Hello, Child!';return (<View style={styles.container}><Child message={message} /></View>);
};const Child = ({ message }) => (<View style={styles.child}><Text style={styles.text}>{message}</Text></View>
);const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},child: {backgroundColor: '#f0f0f0',padding: 10,borderRadius: 5,},text: {fontSize: 16,},
});export default Parent;
2.2 Callback Functions

通过回调函数传递数据或事件。

示例:

import React, { useState } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';const Parent = () => {const [message, setMessage] = useState('Hello, Child!');const handleChange = (newMessage) => {setMessage(newMessage);};return (<View style={styles.container}><Child onChange={handleChange} /><Text style={styles.text}>{message}</Text></View>);
};const Child = ({ onChange }) => {const newMessage = 'New Message from Child';return (<View style={styles.child}><Button title="Change Message" onPress={() => onChange(newMessage)} /></View>);
};const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},child: {margin: 10,},text: {fontSize: 16,marginTop: 10,},
});export default Parent;

导师简介

前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

温馨提示:可搜老码小张公号联系导师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474350.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《译文》2024年11月数维杯国际大学生数学建模挑战赛题目

# 赛题正式发布 2024年第十届数维杯国际大学生数学建模挑战赛顺利开赛&#xff0c;竞赛开始时间为北京时间2024年11月15日09:00至北京时间2024年11月19日09:00&#xff0c;共计4天&#xff0c;竞赛题目正式发布&#xff0c;快来一起围观&#xff0c;你认为今年的哪个题目更具有…

机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类 贝叶斯分类理论 假设现有两个数据集&#xff0c;分为两类 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率&#xff0c;用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率&#xff0c;那么对于一个新数据点(x,y)…

【会话文本nlp】对话文本解析库pyconverse使用教程版本报错、模型下载等问题解决超参数调试

前言&#xff1a; 此篇博客用于记录调用pyconverse库解析对话文本时遇到的问题与解决思路&#xff0c;以供大家参考。 文章目录 pycoverse介绍代码github链接问题解决1 [cannot import name ‘cached_download‘ from ‘huggingface_hub‘ 问题解决](https://blog.csdn.net/wei…

5G的SUCI、SUPI、5G-GUTI使用场景及关系

使用场景(来源于对23.501、23.502、33.501、23.003的理解) 1、UE初始注册时&#xff0c;根据HN Public Key把SUPI加密成SUCI&#xff0c;并发送初始注册请求 2、AMF转发SUCI给AUSF和UDM进行认证&#xff0c;并获取解密后的SUPI 3、AMF根据SUPI生成一个5G-GUTI&#xff0c;并保…

2. kafka 生产者

一. 生产者消息发送流程 在消息发送的过程中&#xff0c;涉及到了两个线程&#xff1a;main线程和Sender线程。Producer发送的消息会分别经过Interceptors(拦截器)&#xff0c;Serializer(序列化器)&#xff0c;Partitioner(分区器)最终到达RecordAccumulator&#xff0c;Recor…

web应用安全和信息泄露预防

文章目录 1&#xff1a;spring actuator导致的信息泄露1.1、Endpoint配置启用检测1.2、信息泄露复现1.3、防御 2&#xff1a;服务端口的合理使用3&#xff1a;弱口令&#xff08;密码&#xff09;管理4&#xff1a;服务端攻击4.1、短信业务&#xff0c;文件上传等资源型接口1、…

智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁

近日&#xff0c;贵州省贵阳市中级人民法院对余华英拐卖儿童案做出了一审宣判&#xff0c;判处其死刑&#xff0c;剥夺政治权利终身&#xff0c;并处没收个人全部财产。这一判决不仅彰显了法律的威严&#xff0c;也再次唤起了社会对拐卖儿童犯罪的深切关注。 余华英自1993年至2…

计算机编程中的测试驱动开发(TDD)及其在提高代码质量中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的测试驱动开发&#xff08;TDD&#xff09;及其在提高代码质量中的应用 计算机编程中的测试驱动开发&#xff08;T…

【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】

目录 一、全局锁 二、表级锁 1.表锁 2.元数据锁 3.意向锁 三、行级锁 1. 行锁 2.间隙锁 3.临建锁 锁是处理并发情况下&#xff0c;对数据的一致性的关键因素&#xff0c;也是并发情况下对效率影响非常大的。 1、全局锁&#xff1a;锁定表中所有数据。 2、表级锁&#xff1a;…

thinkphp6 入门(2)--视图、渲染html页面、赋值

use think\facade\View;View::assign([name > ThinkPHP,email > thinkphpqq.com]);View::assign(data,[name > ThinkPHP,email > thinkphpqq.com]); View::fetch(index);助手函数 view(index, [name > ThinkPHP,email > thinkphpqq.com ]); 模板输出 {$na…

百度智能云 VectorDB 优势数量 TOP 1

近日&#xff0c;IDC 发布了《RAG 与向量数据库市场前景预测》报告&#xff0c;深入剖析了检索增强生成&#xff08;RAG&#xff09;技术和向量数据库市场的发展趋势。报告不仅绘制了 RAG 技术的发展蓝图&#xff0c;还评估了市场上的主要厂商。在这一评估中&#xff0c;百度智…

MySQL索引的底层实现原理是什么?

MySQL索引的底层实现主要基于B树数据结构。B树是一种平衡多路查找树&#xff0c;具有以下特点&#xff1a; 1、树的所有叶子节点都位于同一层&#xff1a; 这确保了从根节点到每个叶子节点的路径长度相同&#xff0c;保证了查询效率的一致性。 2、节点中的数据按键值大小有序…

手搓神经网络(MLP)解决MNIST手写数字识别问题 | 数学推导+代码实现 | 仅用numpy,tensor和torch基本计算 | 含正反向传播数学推导

手写数字识别&#xff08;神经网络入门&#xff09; 文章目录 手写数字识别&#xff08;神经网络入门&#xff09;实验概述实验过程数据准备模型实现线性变换层前向传播反向传播更新参数整体实现 激活函数层&#xff08;ReLU&#xff09;前向传播反向传播整体实现 Softmax层&am…

在MATLAB中导入TXT文件的若干方法

这是一篇关于如何在MATLAB中导入TXT文件的文章&#xff0c;包括示例代码和详细说明 文章目录 在MATLAB中导入TXT文件1. 使用readtable函数导入TXT文件示例代码说明 2. 使用load函数导入TXT文件示例代码说明 3. 使用importdata函数导入TXT文件示例代码说明 4. 自定义导入选项示例…

ks 小程序sig3

前言 搞了app版的快手之后 &#xff08;被风控麻了&#xff09; 于是试下vx小程序版的 抓包调试 小程序抓包问题 网上很多教程&#xff0c; github也有开源的工具代码 自行搜索 因为我们需要调试代码&#xff0c;所以就用了下开源的工具 &#xff08;可以用chrome的F12功能&a…

解决Spring Boot整合Redis时的连接问题

前言 在使用Spring Boot整合Redis的过程中&#xff0c;经常会遇到连接问题&#xff0c;尤其是当Redis服务部署在远程服务器上时。 问题描述 当你尝试连接到Redis服务器时&#xff0c;可能会遇到以下错误&#xff1a; org.springframework.data.redis.connection.PoolExcept…

算法--“汽车加油”问题.

def greedy():n 100 # 汽车满油后可行驶的最大距离d [50, 80, 39, 60, 40, 32] # 加油站的距离k len(d) # 加油站的数量# 检查是否有加油站距离超过汽车的最大行驶距离for dist in d:if dist > n:print(no solution)returnnum 0 # 加油次数current_position 0 # 当…

道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会

11月12日&#xff0c;2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办&#xff0c;电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合&#xff0c;满足高…

sqli—labs靶场 5-8关 (每日4关练习)持续更新!!!

Less-5 上来先进行查看是否有注入点&#xff0c;判断闭合方式&#xff0c;查询数据列数&#xff0c;用union联合注入查看回显位&#xff0c;发现到这一步的时候&#xff0c;和前四道题不太一样了&#xff0c;竟然没有回显位&#xff1f;&#xff1f;&#xff1f; 我们看一下源…

【qt】控件3

1.setToolTip和setToolTipDuration setToolTip这个函数用来设置提醒内容 setToolTipDuration这个函数用来设置提醒时间 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->help->setToolTip("按下这个按键就可以提…