react 基础学习笔记

1.react 语法

①数据渲染 

函数组件将HTML结构直接写在函数的返回值中

JSX只能有一个根元素

JSX插值写法 

插值可以使用的位置
1.标签内容;

2.标签属性 

 JSX 条件渲染:三目运算符;

 JSX根据数据进行列表渲染:map()方法(注意需要唯一的key)

diff算法:key 用来在虚拟 DOM中 ,在同一级目录中,去保证当前元素的唯一性

 ②事件处理操作

在JSX里面属性通常是以驼峰形式命名 

③状态处理

(1)对象属性修改

响应式数据驱动页面内容进行更新 ——>useState函数就能解决这个问题

useState(默认内容)函数调用会返回一个数组,可以解构出来为:第一个为当前数据的引用,第二个用来修改这个状态。
注意:set是一个直接换掉的操作,而非局部的修改。因此数据的更新需要将数据写全(简化书写可以通过展开运算符——注意新属性必须后写)。

(2)数组形态操作

添加和排序,指定位置删除,插入做更新同理也需要注意位置(可以借助filter函数)

 2.组件通信与插槽

React 中的组件分为两种类型一种是 React DOM 组件,一种是 React 组件。

DOM 组件指的是 React支持的所有的 HTML和 SVG 标签

DOM 组件的类属性  className,同时也可以通过style写键值对(但要写成驼峰命名)来进行  style 属性的设置。

DOM组件示例:

展开语法:将所有属性提前预制为一个对象

JSX 的展开操作并不是ES6的展开运算符,不能在没有容器的地方单独使用。 

在子组件拿到数据时,一般通过数据的解构。

不只是可以通过传递键值, 也可以传递状态表示 active 一般默认为 true。

子组件向父组件传递状态为:

子组件也是在props处声明事件 

 

多级组件穿透的钩子 useContext() ——> 能够在组件树中传递数据,而无需显式地在每一层组件中通过 props 传递数据。

 


3.ReactHooks 

(1)useRender

userRender(操作的函数, 状态默认值)

 (2)useRef

useRef 不是一个响应式的状态,不会随着组件更新而更新。通过调用 useRef 返回包含的current属性的对象进行赋值。

 

默认子组件不对外开发内部功能

如果希望子组件内部的函数方法能够被父组件进行使用,便需要进行函数表示式进行定义。

子组件ref为childRef便能够实现在父组件使用子组件的函数方法。

(3)useEffect

即副作用函数,组件渲染时执行 。

后面依赖数组为 变量状态变更就会导致副作用重新执行。

(4)useMemo

进行数据缓存的钩子。用于在组件渲染过程中缓存计算结果。它接收一个创建函数和一个依赖数组,仅当依赖数组中的某个值改变时,才会重新计算创建函数的结果。这有助于避免在每次渲染时都进行昂贵的计算,从而提升性能。

import React, { useMemo, useState } from 'react';  function FilterList({ items }) {  const [searchTerm, setSearchTerm] = useState('');  // 使用 useMemo 来缓存过滤后的结果  const filteredItems = useMemo(() => {  return items.filter(item => item.toLowerCase().includes(searchTerm.toLowerCase()));  }, [items, searchTerm]);  return (  <div>  <input  type="text"  value={searchTerm}  onChange={e => setSearchTerm(e.target.value)}  placeholder="Search..."  />  <ul>  {filteredItems.map((item, index) => (  <li key={index}>{item}</li>  ))}  </ul>  </div>  );  
}

根据一个列表和一个搜索词来过滤结果。可以使用 useMemo 来缓存过滤后的结果,避免每次输入改变时都重新计算整个列表。 

 

(5)useCallback

进行函数缓存的钩子(解决父组件变更导致子组件重新渲染的问题)。用于缓存函数定义。它接收一个返回函数的函数和一个依赖数组,仅当依赖数组中的某个值改变时,才会返回一个新的函数。这主要用于优化性能,特别是在父组件传递给子组件的函数作为 props 时,可以避免子组件因父组件重新渲染而接收到新的函数引用,从而避免不必要的重新渲染。

import React, { useState, useCallback } from 'react';  function ParentComponent() {  const [count, setCount] = useState(0);  // 使用 useCallback 来缓存 handleClick 函数  const handleClick = useCallback(() => {  console.log('Button clicked', count);  }, [count]);  return (  <div>  <p>Count: {count}</p>  <button onClick={() => setCount(count + 1)}>Increment</button>  <ChildComponent onButtonClick={handleClick} />  </div>  );  
}  function ChildComponent({ onButtonClick }) {  console.log('ChildComponent rendered');  return (  <button onClick={onButtonClick}>Click me from Child</button>  );  
}

父组件有一个按钮,点击按钮时会更新状态,并将一个函数传递给子组件,因此可以使用 useCallback 来确保传递给子组件的函数引用不会因父组件的重新渲染而改变。

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

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

相关文章

【代码随想录Day50】图论Part02

岛屿数量 深搜 题目链接/文章讲解&#xff1a;代码随想录 class Solution {// 计算网格中岛屿的数量public int numIslands(char[][] grid) {int sum 0; // 初始化岛屿数量为0// 遍历整个网格for (int i 0; i < grid.length; i) {for (int j 0; j < grid[0].length…

列表、元组、集合、字典和 pandas 数据框(DataFrame)之间的数据转换

二、列表、元组、集合、字典和 pandas 数据框&#xff08;DataFrame&#xff09;之间的数据转换 在 Python 中&#xff0c;列表、元组、集合、字典和 pandas 数据框&#xff08;DataFrame&#xff09;是常见的数据结构&#xff0c;它们可以通过多种方式相互转换。每种数据结构…

基础知识 表达式 C语言

C语言中的表达式是指可以代表某个值的写法统称 因此&#xff0c;C语言中单独的常量、单独的变量写法都算表达式 C语言支持的表达式按值类型分为三类&#xff1a;1. 数值表达式&#xff1a;代表某个整数值 或 小数值2. 逻辑表达式&#xff1a;代表真值 ( 非 0 ) 或 假值 ( 0 )3…

【读书笔记-《网络是怎样连接的》- 2】Chapter2_1-协议栈通信详细过程

第二章从协议栈这部分来看网络中的通信如何实现&#xff0c;准备从两部分来进行分解。本篇是第一部分&#xff1a;详细介绍TCP协议栈收发数据的过程。 首先来看下面的图。从应用程序到网卡需要经过如下几部分&#xff0c;上面的部分通过委托下面的部分来完成工作。首先是应用程…

Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备

关心微软技术和产品的朋友一定对这个网站很熟悉&#xff1a;https://microsoftgraveyard.com/&#xff0c;这里静静的躺着很多微软技术和产品。近日&#xff0c;微软又在准备一场新的“告别仪式”了&#xff0c;这次是 Windows 10、Office 2016/2019 和一些老旧的协议与技术。让…

Apache Seata 新版本集成了 RocketMQ 事务消息

大家好&#xff0c;我是君哥。 Apache Seata 是一款高性能、简单易用的分布式事务中间件&#xff0c;它包含 AT、TCC、SAGA 和 XA 四种模式。 在最近发布的新版本中&#xff0c;Apache Seata 引入了 RocketMQ 中间件&#xff0c;并且跟 RocketMQ 的事务消息配合使用。今天我们…

网络设备基本故障排查方法

1.路由器配置了vlan间路由&#xff0c;但VLAN之间无法通信 display vlan 确认VLAN配置是否正确&#xff0c;包括端口成员关系 display ip routing-table 确认路由器是否正确配置了VLAN间的路由 display interfaces 确认所有相关的接口状态是否正常&#xff0c;包括Trunk端口是否…

Vue Router实现路由懒加载

为了提高页面的加载速度&#xff0c;我们可以使用Vue Router的路由懒加载功能。路由懒加载是什么呢&#xff0c;路由懒加载就是只有当访问某个路由的时候再加载其相应的页面。 官方文档地址https://router.vuejs.org/guide/advanced/lazy-loading.html 以前我写路由懒加载的时候…

WHAT - Excel 文件上传解析与编码

目录 一、简单文件上传示例可获取的文件信息获取文件信息的示例代码多文件上传其他信息1. FileReader 对象2. URL.createObjectURL 二、Excel 文件格式和编码1. XLSX 文件&#xff08;.xlsx&#xff09;2. CSV 文件&#xff08;.csv&#xff09;3. 如何处理编码问题4. 总结 三、…

3.STM32之蜂鸣器

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 这行代码使能了GPIOA外设的时钟。在STM32微控制器中&#xff0c;每个外设都需要单独使能其时钟才能正常工作。 GPIO_InitTypeDef GPIO_InitStructure; 定义了一个名为GPIO_InitStructure的变量&#xff0c;该变量的类型…

yub‘s Algorithmic Adventures_Day12

反转字符串II link:541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 思路分析 关键点在于我们要找对反转思路&#xff0c;2k是一个区间&#xff0c;没达到条件和达到条件之后怎么处理. 因此考虑怎么筛选条件. 首先创建一个字符数组用于存储遍历的下标位置用于筛…

Scala内部类的运用

内部类&#xff1a;定义在类里面的类&#xff08;内部类可以访问私有成员用它来操作类的私有成员&#xff0c;封闭性更好&#xff09; class Student{var age18def say():Unit{}class Book{val bookName: Any "Scala程序设计"}}object Test19 {def main(args: Arra…

在wpf中登录成功之后怎么设置主页布局及点击不同的菜单跳转到不同的页面,这个是我们做wpf项目必要会的一个功能

通过frame与page实现在mvvm下的页面跳转 在wpf中登录成功之后怎么设置主页布局及点击不同的菜单跳转到不同的页面_哔哩哔哩_bilibili 1、MainWindow代码 <DockPanel><StackPanel DockPanel.Dock"Top" Height"40"><Grid><Grid.ColumnD…

详细教程:使用Grafana监控Mysql

什么是Grafana Grafana是一个跨平台的开源的度量分析和可视化工具&#xff0c;可以通过将采集的数据查询然后可视化的展 示&#xff0c;并及时通知。 下载Grafana 下载地址: https://grafana.com/grafana/download [rootgrafana ~]# wget https://dl.grafana.com/oss/relea…

【pytest中同一个用例多次执行生成一个测试报告的方法】

为了实现主函数执行一次&#xff0c;而指定的测试函数&#xff08;如 test_img&#xff09;执行 10 次&#xff0c;你可以通过以下两种方式进行控制&#xff1a; 方法一&#xff1a;在 pytest 中使用 pytest.mark.parametrize 使用 pytest 的 parametrize 装饰器可以实现让某…

qt QPushButton详解

QPushButton是Qt Widgets模块中的一个基本控件&#xff0c;用于提供可点击的按钮。它是用户界面中最为常见和常用的控件之一&#xff0c;通过点击按钮&#xff0c;用户可以触发特定的应用程序操作。 重要方法 QPushButton(const QIcon &icon, const QString &text, QWi…

【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程

引言 OpenAI 推出的 DALLE 工具因其能够生成令人惊叹的艺术作品而备受瞩目。DALLE 不仅能够生成静态图像&#xff0c;还能根据用户的需求进行风格化处理&#xff0c;创造出独特的艺术作品。通过 OpenAI 的 API&#xff0c;你可以轻松将 DALLE 的强大功能集成到你的 Python 程序…

《分布式机器学习模式》:解锁分布式ML的实战宝典

在大数据和人工智能时代&#xff0c;机器学习已经成为推动技术进步的重要引擎。然而&#xff0c;随着数据量的爆炸性增长和模型复杂度的提升&#xff0c;单机环境下的机器学习已经难以满足实际需求。因此&#xff0c;将机器学习应用迁移到分布式系统上&#xff0c;成为了一个不…

Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案

问题原因 升级Xcode 16 之后&#xff0c;真机运行APP&#xff0c;发现会有Crash&#xff0c;崩溃堆栈线上Crash 在 YYCache 之中。如下图所示 崩溃堆栈如下&#xff1a; * thread #1, queue com.apple.main-thread, stop reason signal SIGABRTframe #0: 0x00000001d9391…

免费开源Odoo软件如何实现电商仓库高效发货

世界排名第一的免费开源ERP软件Odoo&#xff0c;拥有非常强大的仓库管理WMS功能。本文以电商仓库发货管理为例&#xff0c;介绍电商订单的仓库发货作业的各种方法。电商订单仓库发货流程&#xff0c;通常分为三个步骤&#xff0c;即拣货、打包、发货。根据仓库日处理订单数量的…