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

react 大杂烩

组件

1.是返回标签的js函数,是可重复利用的UI元素

function test(){
return (

test

);
}

2.构建组件:

(1)export 导出组件

(2)定义函数,名称必须以大写字母开头

(3)添加标签

3.具名导出

将test组件从test.tsx导出

import { test } from ‘./test’

4.JSX标签只能返回一个根元素,用父标签包裹

标签必须闭合

驼峰命名

5.JSX与大括号

通过{}使用JS变量

使用场景:jsx内的文本,=后的属性

{{}},包裹的对象

6.props传递

Props 反映了组件在任何时间点的数据

传递:通过jsx

读取:

function Avatar({ person, size }) {
// 在这里 person 和 size 是可访问的
}

7.条件渲染

if语句,&&和?:运算符选择性渲染jsx

{cond ? : } 表示 “当 cond 为真值时, 渲染 ,否则

{cond && } 表示 “当 cond 为真值时, 渲染 ,否则不进行渲染”

8.渲染列表

数据存在列表中,通过map()或filter()遍历,用

  • 包裹并返回

直接放在map()方法中的元素要指定key,一般使用能从给定数据中稳定取得的值

State和生命周期

useState的唯一参数是state变量的初始值,state变量保存上次渲染的值,state setter函数更新state并触发react重新渲染组件

state是隔离且组件私有的

state管理部分

没有在网站上找到生命周期的内容

23-06-21

Hook

1.Hooks ——以 use 开头的函数——只能在组件或自定义 Hook的最顶层调用,不能在条件语句、循环语句或其他嵌套函数内调用 Hook。

useState

setState是异步的,虽然时间很短,但不足以在上一行代码设置,下一行代码就使用,即state 的值始终”固定“在一次渲染的各个事件处理函数内部。

批处理:React 会等到事件处理函数中的所有代码都运行完毕再处理 state 更新。这允许更新多个变量,而不会触发太多次重新渲染。但也因此只有其他代码执行完毕后,ui才会更新。

如果想在下一次渲染之前多次更新同一个state,可以像setNumber(n => n + 1)传入更新函数。

组件的渲染:初次渲染、修改state会触发组件渲染

只想更新state中对象的部分属性,可以使用…对象传播语法,更新嵌套对象,需要一层层展开

setPerson({
…person, // Copy the old fields
firstName: e.target.value // But override this one
});

更新state中的数组:

添加元素,concta,[…arr],why?因为state只能通过setstate修改,使用[].push会修改state

删除元素,filter,slice

替换,map

排序,先用临时变量拷贝数组(浅拷贝),排序后再用setState

构建state的原则:

合并关联的state

避免互相矛盾的state

避免冗余的state,如果可以使用两个state表达第三个state,那就不需要三个state

避免重复的state

避免深度嵌套的state

状态提升:

当希望两个组件的状态始终同步更改,可以将相关 state 从这两个组件上移除,并把 state 放到它们的公共父级,再通过 props 将 state 传递给这两个组件

移除一个组件的时候,也会销毁它内部的state,只有在相同位置渲染同样的组件,才保留。

可以通过为一个子树指定一个不同的 key 来重置它的 state。

useContext

Context 使组件向其下方的整个树提供信息(传递多层)

使用场景:

主题,在应用顶层放一个 context provider,提供一个统一的主题模式

当前账户,许多子组件需要当前登陆的用户信息

路由

状态管理

创建方法:

通过 export const MyContext = createContext(defaultValue) 创建并导出 context。

在无论层级多深的任何子组件中,把 context 传递给 useContext(MyContext) Hook 来读取它。

在父组件中把 children 包在 <MyContext.Provider value={…}> 中来提供 context。

Context 会穿过中间的任何组件

useRef

使用场景:记住一些信息,但不想让这些信息触发渲染

通过ref.current访问数据

更改时不会触发重新渲染,可以在渲染过程之外修改和更新current的值

子组件使用父组件的ref时,直接往子组件传ref

父组件使用子组件的ref时需要使用forwardRef

23-06-25

useEffect

useEffect(() => {
// This runs after every render
});

useEffect(() => {
// This runs only on mount (when the component appears)
}, []);

useEffect(() => {
// This runs on mount and also if either a or b have changed since the last render
}, [a, b]);

return:一般返回一个清理函数,每次effect再次运行之前,react都会调用这个清理函数,最后一次是在组件卸载(被删除)时调用。

effect是由渲染本身引起的,默认情况下,effect在初始渲染和每次再次渲染后运行。

依赖项为空时,仅在组件挂载时执行。

所使用的所有依赖都要写到依赖项中。

如果Effect 的所有依赖项都具有与上次渲染期间相同的值,React 将跳过 Effect。

在严格模式下,React 会挂载组件两次(仅在开发中)来对effect进行压力测试。

什么时候应该使用:

1.控制非react的ui部件:某些api不允许连续调用两次,因此在重新渲染前应该先关闭(通过清理函数),再重新调用

2.订阅:订阅了某些内容,每次只能有一个activate的订阅

3.触发动画:清理函数中需要把时间轴重置为初始状态

4.获取数据:通过数据请求链接获取数据,清理函数中需要中断数据链接或忽略之前请求的数据结果

5.发送analytics

不必要的场景:

1.能够根据state或者props来更新state

2.用useMemo换成昂贵的计算结果

useState

const [state, setState] = useState(initialState);

向组件添加状态

set函数允许将state更新为不同的值并触发渲染

提供的新值与当前state相同,将skip re-rendering 组件及其子组件

调用set函数不会改变运行代码中的状态

import React from ‘react’
import {View,Text,Button} from ‘@mrn/react-native’
import {useState} from ‘react’
export function test(){
const [count,setCount]=useState(1);
function handleClick(){
setCount(count+1);
}
return (
<>


function test+{count}



</>);
}

useEffect

将组件与外部系统(不受react控制的代码)同步

useEffect(setup, dependencies?)

setup:具有效果逻辑的function,dependencies:需要包括在function中使用到的组件中的每个值

return undefined

import { useEffect } from ‘react’;
import { createConnection } from ‘./chat.js’;

function ChatRoom({ roomId }) {
const [serverUrl, setServerUrl] = useState(‘https://localhost:1234’);

useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.connect();//连接
return () => {
connection.disconnect();//断开
};
}, [serverUrl, roomId]);
// …
}

useCallback

在重新渲染之间缓存function定义(?)

const cachedFn = useCallback(fn, dependencies)

fn:要缓存的函数值,dependencies:fn中涉及到的所有的reactive values

return 传递的function

使用:

1.跳过组件的重新渲染:当一个组件重新渲染时,React 会递归地重新渲染它的所有子组件,通过useCallback包装的function,可以保证它在重新渲染是相同的function

2.从被memorized的callback(?)中更新state

3.防止Effect过于频繁地触发

4.优化自定义Hook

useMemo

在重新渲染之间缓存计算结果

const cachedValue = useMemo(calculateValue, dependencies)

calculateValue:计算要缓存的值的函数

初次渲染时,返回不带参数,下一次渲染期间返回上次渲染中已存储的值

使用:

1.跳过昂贵的重新计算

2.跳过组件的重新渲染

3.记忆另一个Hook依赖

4.记忆一个function

useRef

引用一个不需要渲染的值

const ref = useRef(initialValue)

initialValue:ref 对象的 current 属性的初始值。可以是任意类型的值。这个参数会首次渲染后被忽略。

返回一个只有一个属性的对象:

current:最开始被设置为传递的 initialValue。之后可以把它设置为其他值。如果把 ref 对象作为一个 JSX 节点的 ref 属性传递给 React,React 将为它设置 current 属性。

在后续的渲染中,useRef 将返回同一个对象。

可以修改ref.current的属性,除了初始化以外不要在渲染期间写入 或者读取 ref.current

使用:

1.用ref引用一个值

2.操作DOM

3.避免重复创建ref的内容

相关文章:

react 大杂烩

组件 1.是返回标签的js函数&#xff0c;是可重复利用的UI元素 function test(){ return ( test ); } 2.构建组件&#xff1a; &#xff08;1&#xff09;export 导出组件 &#xff08;2&#xff09;定义函数&#xff0c;名称必须以大写字母开头 &#xff08;3&#xff09…...

图解 STP

网络环路 现在我们的生活已经离不开网络&#xff0c;如果我家断网&#xff0c;我会抱怨这什么破网络&#xff0c;影响到我刷抖音、打游戏&#xff1b;如果公司断网&#xff0c;那老板估计会骂娘&#xff0c;因为会影响到公司正常运转&#xff0c;直接造成经济损失。网络通信中&…...

Kubernetes技术--k8s核心技术Controller控制器

1.Controller概述 Controller是在集群上管理和运行容器的对象。是一个实际存在的对象。 2.pod和Controller之间的关系 pod通过controller实现应用的运维,包括伸缩、滚动升级等操作。 这里pod和controller通过label标签来建立关系。如下所示: 3.Deployment控制器应用场景 -1:…...

Kubernetes技术--k8s核心技术 Secret

1.概述 Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret可以以 Volume 或者环境变量的方式使用。 作用 加密数据存储在/etc中,使得pod容器以挂载volume方式进行访问。在进行的数据存储中是以base64加密的方式…...

day27 String类 正则表达式

String类的getBytes方法 String s "腻害"; byte[] bytes s.getBytes(StandardCharsets.UTF_8); String类的new String方法 String ss "ss我的"; byte[] gbks ss.getBytes("gbk"); String gbk new String(gbks, "gbk"); String类的…...

Java设计模式:四、行为型模式-10:访问者模式

一、定义&#xff1a;访问者模式 访问者模式&#xff1a;核心在于同一个事物不同视角下的访问信息不同。 在一个稳定的数据结构下&#xff0c;例如用户信息、雇员信息等&#xff0c;增加易变的业务访问逻辑。为了增强扩展性&#xff0c;将两部分的业务解耦的一种设计模式。 二…...

【juc】读写锁ReentrantReadWriteLock

目录 一、说明二、读读不互斥2.1 代码示例2.2 截图示例 三、读写互斥3.1 代码示例3.2 截图示例 四、写写互斥4.1 代码示例4.2 截图示例 五、注意事项5.2.1 代码示例5.2.2 截图示例 一、说明 1.当读操作远远高于写操作时&#xff0c;使用读写锁让读读可以并发&#xff0c;来提高…...

Linux开机启动Tomcat

需求背景 Linux重启后要手动执行"startup.sh"启动Tomcat&#xff0c;比较麻烦&#xff0c;想要Linux开机启动Tomcat。 开机启动 #---------------------------------------------------------- sudo tee /usr/bin/tomcat.sh <<-EOF #! /bin/bash nohup /opt/to…...

javaweb、spring、springmvc和springboot有什么区别,都是做什么用的?

JavaWeb是一种基于Java技术的Web开发模式&#xff0c;用于构建动态的、可交互的Web应用程序。它是一种使用Java语言开发Web应用的技术堆栈&#xff0c;包括Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;、JavaServer Faces&#xff08;JSF&#xff09;等。JavaWe…...

已解决module ‘pip‘ has no attribute ‘pep425tags‘报错问题(如何正确查看pip版本、支持、32位、64位方法汇总)

本文摘要&#xff1a;本文已解决module ‘pip‘ has no attribute ‘pep425tags‘的相关报错问题&#xff0c;并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。并且最后说明了如何正确查看pip版本、支持、32位、64位方法汇总 &#x1f60e; 作者介绍&…...

Matlab(画图初阶)

目录 1.plot()函数 2. hold(添加新绘图是否保留旧绘图) 3. Plot Style 3.1 线型 3.2 标记 3.3 颜色 ​编辑 4. legend() 5.X 、Y and Title&#xff1f; 6. Text()和annotation() 7.line(创建基本线条) 7.1 基本语法 7.2 指定线条属性 7.3 更改线条属性 8.图像属性 8.1 …...

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…...

C语言面试题值反转字符串

知识捡漏本 1.C语言优先级 &#xff1a;左高于高于 右 2.定义宏函数product&#xff0c;调用product后&#xff0c;里面的i和i都是加两次1&#xff0c;i就是两个加2后的i相乘&#xff0c;i是开始的i和1后的i相乘。 3.用i (j4,k 8,m 16);这种定义方法&#xff0c;最终i和最后一…...

【大数据】Apache Iceberg 概述和源代码的构建

Apache Iceberg 概述和源代码的构建 1.数据湖的解决方案 - Iceberg1.1 Iceberg 是什么1.2 Iceberg 的 Table Format 介绍1.3 Iceberg 的核心思想1.4 Iceberg 的元数据管理1.5 Iceberg 的重要特性1.5.1 丰富的计算引擎1.5.2 灵活的文件组织形式1.5.3 优化数据入湖流程1.5.4 增量…...

对分库分表进行批量操作

对ShardingJDBC基础了解&#xff1a;https://blog.csdn.net/m0_63297646/article/details/131894472 对批量操作案例&#xff1a;https://blog.csdn.net/m0_63297646/article/details/131843517 分为db0和db1两个库&#xff0c;每个库都有三张订单表&#xff0c;分表键根据年份…...

大数据组件-Flume集群环境的启动与验证

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…...

【包过滤防火墙——iptables静态防火墙】的简单使用

文章目录 规则链的分类--五链处理的动作iptables常用参数和作用 防火墙就是堵和通的作用 iptables &#xff1a;包过滤防火墙&#xff0c;是内核防火墙netfilter的管理工具 核心&#xff1a;四表五链 规则链的分类–五链 在进行路由选择前处理的数据包&#xff1a;PREROUTIN…...

关于MySQL数据库版本不同导致表进行比较的时候报错illegal mix of collations...的问题

问题发生的原委 之前在项目开发的时候&#xff0c;我本地也建立了数据库用作开发库&#xff0c;我本地的数据库版本是5.7的&#xff0c;但是测试和生产库都是8.0的版本&#xff0c;我们定义的数据库字符集是utf8mb4&#xff0c;排序规则是utf8mb4_general_ci&#xff0c;前段时…...

进程、操作系统

文章目录 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;1. 概述2. CPU 二、操作系统&#xff08;Operating System&#xff09;三、进程(process)/任务(task) 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 1. 概述 分类 CPU 中央处…...

hadoop学习:mapreduce入门案例四:partitioner 和 combiner

先简单介绍一下partitioner 和 combiner Partitioner类 用于在Map端对key进行分区 默认使用的是HashPartitioner 获取key的哈希值使用key的哈希值对Reduce任务数求模决定每条记录应该送到哪个Reducer处理自定义Partitioner 继承抽象类Partitioner&#xff0c;重写getPartiti…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...