react 基础学习笔记

news2025/1/13 7:49:42

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 来确保传递给子组件的函数引用不会因父组件的重新渲染而改变。

(6)useState

setState 是异步的,也就是说,状态的更新不会立即生效。在状态更新之后立即读取状态值可能会得到旧的值。因此,在需要立即使用最新状态的地方,可以考虑使用 setState 的回调函数


项目经验:

1.样式初始化顺序

2.配置路径别名

目前ts对@指向src目录的提示是不支持的,vite默认也是不支持的。

所以需要手动配置@符号的指向,在vite.config.ts中添加配置: 

路径别名提示:

虽然现在路径别名已经有了,但是在文件中输入@是没有提示路径的。

需要在tsconfig.json中:添加两项配置 :

3.模块化引入样式

import "./组件.scss"  全局引入的样式会造成污染,需要进模块化引入(类似Vue的scoped)

4.路由配置 

(1)组件化配置路由:

 (2)编程式(对象写法)导航

路由如果需要有操作,就不能写没有return的简写方法。

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

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

相关文章

Elastic Stack - FileBeat 入门浅体验

Filebeat 是 Elastic Stack 中的一个轻量级日志转发器&#xff0c;主要用于收集和转发日志数据。Filebeat 作为代理安装在您的服务器上&#xff0c;可以监控您指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将其转发到 Elasticsearch 或 Logstash 进行索引。 一…

XCode16中c++头文件找不到解决办法

XCode16中新建Framework&#xff0c;写完自己的c代码后&#xff0c;提示“<string> file not found”等诸如此类找不到c头文件的错误。 工程结构如下&#xff1a; App是测试应用&#xff0c;BoostMath是Framework。基本结构可以参考官方demo&#xff1a;Mix Swift and …

“循环购体系:创新消费回馈模式引领电商新风尚“

各位听众&#xff0c;你们好&#xff0c;我是吴军&#xff0c;今天我想与你们分享一种创新且引人注目的商业模式——循环购体系。这是一种融合了消费回馈与积分制度的新型购物模式&#xff0c;它在顾客与商家之间搭建了一个全新的、互动性强的桥梁。 在循环购体系的运作中&…

云联网对等连接--实现内网互通

云联网 今天给大家介绍一款产品&#xff0c;腾讯云的云联网。 云联网&#xff1a;为您提供云上私有网络间&#xff08;VPC&#xff09;、VPC 与本地数据中心间&#xff08;IDC&#xff09;内网互联的服务&#xff0c;具备全网多点互联、路由自学习、链路选优及故障快速收敛等…

详细解读 CVPR2024:VideoBooth: Diffusion-based Video Generation with Image Prompts

Diffusion Models专栏文章汇总:入门与实战 前言:今天是程序员节,先祝大家节日快乐!文本驱动的视频生成正在迅速取得进展。然而,仅仅使用文本提示并不足以准确反映用户意图,特别是对于定制内容的创建。个性化图片领域已经非常成功了,但是在视频个性化领域才刚刚起步,这篇…

构建自然灾害预警决策一体化平台,筑牢工程安全数字防线

近年来&#xff0c;国家和部委也强调了要切实加强地质灾害监测预警。作为国内智慧应急领域的先行者&#xff0c;Mapmost持续探索利用数字孪生技术&#xff0c;推进自然灾害风险预警精细化&#xff0c;强化对监测数据的综合分析和异常信息研判处置。建立健全区域风险预警与隐患点…

.NET Core WebApi第7讲:项目的发布与部署

一、理解 二、项目的发布与部署 1、点击Publish进行发布 2、等待生成publish文件&#xff0c;如下图 3、把上图中发布的文件在服务器里面装上&#xff0c;即在windows的IIS里把它挂上去。如此便可以直接去访问当前的前/后端了。 &#xff08;1&#xff09; 注意&#xff1a;…

Python自动化测试中的Mock与单元测试实战

在软件开发过程中&#xff0c;自动化测试是确保代码质量和稳定性的关键一环。而Python作为一门灵活且强大的编程语言&#xff0c;提供了丰富的工具和库来支持自动化测试。本文将深入探讨如何结合Mock与单元测试&#xff0c;利用Python进行自动化测试&#xff0c;以提高代码的可…

前端获取csv或者excel 静态数据并使用

这里我将空格全部替换成了 || 好让我变成数组&#xff0c;从而拿到每一条数据中的第一项&#xff0c;相当于excel或者csv文件的第一列的东西 axios.get("/csv/zhongxiang").then((res) > {let rows res.data.split("\n");for (let row of rows) {let c…

Axios 请求超时设置无效的问题及解决方案

文章目录 Axios 请求超时设置无效的问题及解决方案1. 引言2. 理解 Axios 的超时机制2.1 Axios 超时的工作原理2.2 超时错误的处理 3. Axios 请求超时设置无效的常见原因3.1 配置错误或遗漏3.2 超时发生在建立连接之前3.3 使用了不支持的传输协议3.4 代理服务器或中间件干扰3.5 …

Windows 11 24H2:阻碍新更新的硬件和软件

由于 Microsoft 对特定设备和软件配置采取了保护措施或兼容性限制&#xff0c;数千名用户无法使用 Windows 11 24H2。 微软对使用可能与 Windows 11 24H2 冲突的硬件或应用程序的特定设备设置兼容性限制&#xff0c;从而导致崩溃、性能问题、死机或其他异常行为。 这些限制将…

HelloCTF [RCE-labs] Level 6 - 通配符匹配绕过

开启靶场&#xff0c;打开链接&#xff1a; GET传参cmd /[b-zA-Z_#%^&*:{}\-\<>\"|;\[\]]/ b-zA-Z 过滤b到Z范围内的任何单个字符 _ 过滤下划线 :{}\-\<>\"| 匹配这些符号之一 ;\[\] 匹配这些符号之一 可以尝试在Linux终端中做下面的几个实验&a…

VLAN(虚拟局域网)详解:概念、原理与特点

VLAN&#xff08;虚拟局域网&#xff09;详解&#xff1a;概念、原理与特点 在现代网络中&#xff0c;尤其是企业级网络环境中&#xff0c;VLAN&#xff08;虚拟局域网&#xff09;成为一种非常重要的技术。它不仅可以提升网络的管理效率&#xff0c;还能够有效地隔离不同的设…

python机器人编程——一种3D骨架动画逆解算法的启示(上)

目录 一、前言二、fabrik 算法三、python实现结论PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源ps3.wifi小车控制相关文章资源 一、前言 我们用blender等3D动画软件时&#xff0c;会用到骨骼的动画&#xff0c;通过逆向IK动力学…

docker上传离线镜像包到Artifactory

docker上传离线镜像包到Artifactory 原创 大阳 北京晓数神州科技有限公司 2024年10月25日 17:33 北京 随着docker官方源的封禁&#xff0c;最近国内资源也出现无法拉取的问题&#xff0c;Artifactory在生产环境中&#xff0c;很少挂外网代理去官方源拉取&#xff0c;小编提供…

await前后线程切换改变,AsyncLocal<T>比ThreadLocal<T> 更适合多线程变量隔离的场景

1. await前后线程发生切换&#xff0c;不一定保留在原线程中执行&#xff1b; 2. AsyncLocal<T> 比 ThreadLocal<T> 更适合多数多线程变量隔离的场景。 从 ThreadLocal 到 AsyncLocal https://cloud.tencent.cn/developer/article/1902826

xss跨站及绕过与防护

XSS 它主要是指攻击者可以在页面中插入恶意脚本代码&#xff0c;当受害者访问这些页面时&#xff0c;浏览器会解析并执行这些恶意代码&#xff0c;从而达到窃取用户身份/钓鱼/传播恶意代码等行为。 SVG-XSS SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式&…

WDG看门狗---独立看门狗和窗口看门狗

目录 一. 前言 1. STM32内置看门狗 2. 看门狗的实质 二. 独立看门狗 1. 独立看门狗的系统框图 2. 键寄存器 3. IWDG的超时时间 三. 窗口看门狗 1. 窗口看门狗的系统框图 2. WWDG的工作特性 四. 独立看门狗和窗口看门狗的代码配置 1. 独立看门狗 2. 窗口看门狗 一. 前言 1. S…

一篇文章讲透数据结构之二叉搜索树

前言 在前面的学习过程中&#xff0c;我们已经学习了二叉树的相关知识。在这里我们再使用C来实现一些比较难的数据结构。 这篇文章用来实现二叉搜索树。 一.二叉搜索树 1.1二叉搜索树的定义 二叉搜索树&#xff08;Binary Search Tree&#xff09;是基于二叉树的一种升级版…

python:ADB通过包名打开应用

一、依赖库 os 二、命令 1.这是查看设备中所有应用包名的最简单方法。只需在命令行中输入以下命令&#xff1a; adb shell pm list packages 2.打印启动的程序包名 adb shell am monitor回车&#xff0c;然后启动你想要获取包名的那个应用&#xff0c;即可获得 3.查看正在运…