react笔记(React18)

news2024/9/23 23:33:16

以下笔记可能毫无章法,仅供个人学习记录使用。

关于状态提升

状态提升适用于兄弟组件之间传递数据,共享状态,其实就是把两个兄弟组件要共同使用的数据存放到共同的父组件中,称状态提升。

关于context跨层级组件通信:

首先会想,为什么会有这样一个东西?什么时候会用到,跨层架组件通信其实也可以理解为祖先组件和孙组件之间的通信,如果不想使用props层层传递,可能就会使用context. 

代码实现:


import {createContext,useContext} from 'react'
//1. createContext方法创建一个上下文对象
const MsgContext=createContext()
// 2.在顶层组件 通过provider组件提供数据
// 3.在底层组件 通过useContext钩子函数使用数据(这里的参数不用引号,理解为一个定义的变量名)
function B (){
    return (
        <div>
            this is B
            <C/>
        </div>
    )
}
function C (){
    const msg=useContext(MsgContext)
    console.log(msg)
    return (
        <div>
            this is C:{msg}
        </div>
    )
}
export default function Demo (){
    const msg='this is app message'
    return (
        <div>
            <MsgContext.Provider value={msg}>
                this is Demo
                <B/>
            </MsgContext.Provider>
           
        </div>
    )

}

 关于清除副作用

理解什么是副作用,副作用可以理解为useEffect中编写的由渲染本身引起的对组件外部的操作,被称作副作用操作,比如开启了一个定时器,但是在组件卸载之后定时器并不会关闭,这个就是对组件外部的操作,理解为副作用。

   如何使用?:useEffect中会有两个参数,第一个是一个函数,第二个是一个数据对象,清除动作是在第一个参数函数内部return一个箭头函数的方式,这个return的箭头函数作用相当于vue中的组件卸载声明周期函数。

关于封装自定义hook 

代码逻辑具有通用性,和组件耦合在一起时,不方便复用,可以通过封装自定义hook

封装思路:

1.声明一个以use打头的函数

2.在函数体内封装可复用的逻辑(只要是可以复用的)

3.在组件中用到的状态或者回调return出去(以对象或者数组)

4.在那个组件中要用到这个逻辑,就执行这个函数,解构出来状态和回调进行使用

import {useState} from 'react'

function useToggle(){
    // 可以复用的代码逻辑
    const [value,setValue]=useState(true)
    const toggle=()=>setValue(!value)
    // return 其他组件中需要使用到的状态和方法
    return {value,toggle}
}

export default function Demo (){
   const {value,toggle}=useToggle()
    return (
        <div>
           {value&&<div>this is div</div>}
           <button onClick={toggle}>toggle</button>
        </div>
    )

}

关于json-server:

作用:模拟接口数据请求的一个库。

封装请求数据的hook:

接口请求通常是通用的代码逻辑,避免页面代码重复,通常应该会封装为一个自定义的hook,然后在组件中直接调用方法请求数据。

react中抽取智能组件和业务组件

为什么要抽离?这里我理解的抽离后会让代码更加分离一点,展示组件和业务功能组件分离,方便阅读。

通信:既然分离,会涉及到子组件需要调用到父组件中的方法,进行数据修改等操作。红色区域中的onDel是提供给子组件使用的函数方法,handleDel是父组件中处理数据操作的方法回调。这样在子组件中触发onDel方法并传递参数,父组件就可以接收到子组件中触发的item信息(id等),相当与是子组件像父组件通信。 

 关于redux devtools

redux调试工具:安装到浏览去的扩展程序中,方便调试查看redux中的状态和跟踪状态修改等。

资源共享网盘链接:react项目安装redux-devtools插件方法教程,亲测有效。_react 项目开发浏览器 显示redux怎么按照-CSDN博客

调试效果:因为这里我没有定义使用redux,所以是空的,看不到任何redux共享管理的仓库状态。

 

美团案例:

可以把项目的静态资源或者平时的项目文件存放到github仓库,以后要用会很方便。

npm i 安装依赖

mock服务模拟服务请求数据

package.json文件:安装的项目依赖文件会在这里看到

 

实现步骤:

 

一、启动服务:

1.1启动mock服务:(这里可以理解为模拟后端接口服务请求)

 

1.2 启动前端服务------npm run start

添加购物车:

 

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

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

相关文章

5步掌握“花开富贵”花园管理系统开发——基于Python Django+Vue

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

Java超市收银系统(十、爬虫)

引言 爬虫功能实现&#xff0c;要求爬取页面数据至少100条&#xff0c;这里以豆瓣音乐为示例编写代码豆瓣音乐标签: 民谣 (douban.com)。 功能实现 除了爬虫功能增加&#xff0c;代码其他内容原理和之前博客发布是一致的&#xff0c;只不过这里为了区分&#xff0c;我们重新创…

IDM是海外加速器吗 IDM在国内好用吗

IDM是一款出色的下载加速器&#xff0c;它可以将下载任务分割成多个部分&#xff0c;利用多线程技术加速下载速度&#xff0c;支持断点续传功能&#xff0c;能够从上次下载中断的地方继续下载&#xff0c;提高了下载效率和稳定性&#xff0c;所以深受年轻人的欢迎。 一、IDM是…

集合及数据结构第十节(下)————常用接口介绍、堆的应用和java对象的比较

系列文章目录 集合及数据结构第十节&#xff08;下&#xff09;————常用接口介绍和堆的应用 常用接口介绍和堆的应用 PriorityQueue的特性.PriorityQueue常用接口介绍top-k问题堆排序PriorityQueue中插入对象元素的比较.对象的比较.集合框架中PriorityQueue的比较方式 文…

《系统架构设计师教程(第2版)》第15章-面向服务架构设计理论与实践-04-SOA设计

文章目录 1. SOA设计的标准要求1.1 文档标准1.2 通信协议标准1.3 应用程序统一登记与集成1.4 服务质量 (QoS)1.4.1 可靠性1.4.2 安全性1.4.3 策略1.4.4 控制1.4.5 管理 2. SOA的设计原则 1. SOA设计的标准要求 OASIS Organization for the Advancement of Structured Informati…

RISCV汇编编程讲解

第一章 引言 为什么要讲riscv&#xff1f; riscv的特点&#xff1a; -诞生于顶尖学术机构&#xff1a;诞生于加州大学伯克利分校的体系结构研究院。吸引了大批的顶尖企业参与&#xff08;e.g. 谷歌、华为、高通、阿里巴巴为rsicv的发展提供了大量的资金支持和贡献了技术和人才…

【计算机网络】名词解释--网络专有名词详解(更新)

在网络通信中&#xff0c;有许多专业术语和概念&#xff0c;它们共同构成了网络通信的基础。以下是一些常见的网络术语及其定义和相互之间的关系&#xff1a; 一、网络基础 1.1 电路交换&#xff1a;电路交换是一种在数据传输前建立专用通信路径的通信方式。在通信开始前&…

RAG 技术原理

目录 RAG 技术原理背景和概念实现步骤1. ChatGPT/GLM 等大语言模型的调用2. 读取知识库数据3. 文本索引与答案检索4. 文本嵌入与向量检索5. 文本多路召回与重排序6. 文本问答Promopt优化 原创链接 RAG 技术原理 背景和概念 在自然语言处理领域&#xff0c;大型语言模型&#x…

使用 C 语言实现字符走迷宫 DFS算法应用

使用 C 语言实现字符走迷宫 DFS算法应用 迷宫问题是一个经典的编程问题&#xff0c;通常用于算法训练。我们将通过使用 C 语言来实现一个字符迷宫的求解&#xff0c;其中玩家可以控制字符在迷宫中移动&#xff0c;直到找到出口。 1. 问题描述 我们将设计一个二维迷宫&#xf…

Unity--AnimationCurve动画曲线设置

参考文章&#xff1a;https://blog.csdn.net/qq_20179331/article/details/131309128 打开Clip文件点击Curves选项&#xff0c;选中想要编辑的动作关键帧&#xff0c;右键选择Auto 这样动画就变成线性的了

爆改YOLOv8 |利用 iAFF迭代注意力改进C2f,高效涨点

1&#xff0c;本文介绍 iAFF的核心思想是通过细致的注意力机制优化特征融合&#xff0c;从而提升卷积神经网络的性能。它不仅解决了因尺度和语义不一致导致的特征融合问题&#xff0c;还引入了多尺度通道注意力模块&#xff0c;提供了一个统一且通用的特征融合方案。此外&…

二分查找算法:朴素二分+左右边界二分力扣实战应用

目录&#xff1a; 1、二分查找算法简介 2、算法原理及时间复杂度分析 2.1 朴素二分算法 3.2 查找左右边界的二分算法 3.2.1 查找左边界 3.2.2 查找右边界 3.3 时间复杂度分析 3、二分查找算法模版 3.1 朴素二分模版 3.2 查找左右边界的二分模版 4、算法应用【leetco…

企业收款码,自动统计职员绩效-微信支付商家版

一、企业收款码 在快节奏的商业世界中&#xff0c;效率与精准是企业成功的关键。微信支付商家版企业收款码&#xff0c;为你开启全新的绩效统计时代。 告别繁琐的传统统计方式&#xff0c;无需再耗费大量时间人工整理数据。企业收款码自动统计职员绩效&#xff0c;每一笔交易都…

Cortex-A7的GIC(通用中断控制器):中断处理状态机

0 资料 ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification1 中断处理状态机 1.1 中断处理状态说明及状态机转换图 说明&#xff1a; Inactive&#xff1a;未激活&#xff0c;中断无效。中断非挂起或非激活。 Pending&#xff1a;挂起&a…

iZotope Ozone 11 Advanced:专业音频制作与母带处理的巅峰之作

iZotope Ozone 11 Advanced是一款专为音频工程师、制作人和音乐人设计的顶级音频后期制作软件&#xff0c;无论是Mac还是Windows平台&#xff0c;都能为用户提供无与伦比的音频处理体验。该软件集成了最先进的人工智能技术和一系列精密的音频处理工具&#xff0c;让音频作品的最…

还在烦恼Cosplay论坛开发?探索PHP+Vue的完美解决方案!

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

STM32定时器PWM输出

STM32定时器PWM&#xff08;脉冲宽度调制&#xff09;输出原理&#xff0c;在使用固件库时&#xff0c;主要涉及定时器的配置以及PWM信号的生成。以下是对该原理的详细解释&#xff1a; 一、PWM基本概念 PWM&#xff08;Pulse Width Modulation&#xff09;是一种通过改变脉冲…

docker 容器内文件传到宿主机上

sudo docker cp 容器名&#xff1a;文件路径 宿主机路径 ylshy-Super-Server:~$ pwd /home/yl ylshy-Super-Server:~$ ^C ylshy-Super-Server:~$ sudo docker cp ylafl:/opt/live555/testProgs/rtsp.pcap /home/yl Successfully copied 4.61kB to /home/yl ylshy-Super-Server…

自适应学习率(Datawhale X 李宏毅苹果书 AI夏令营)

传统的梯度下降方法在优化过程中常常面临学习率设置不当的问题。固定的学习率在训练初期可能过大&#xff0c;导致模型训练不稳定&#xff0c;而在后期可能过小&#xff0c;导致训练速度缓慢。为了克服这些问题&#xff0c;自适应学习率方法应运而生。这些方法通过动态调整学习…

Django使用视图动态输出CSV以及PDF的操作详解例子解析

代码示例&#xff1a; 在Django中&#xff0c;使用视图动态输出CSV和PDF文件是一个常见的需求&#xff0c;可以通过Python标准库中的csv模块和reportLab库来实现。以下是一些详细的操作步骤和示例代码。 CSV文件的动态输出 首先&#xff0c;需要导入Python的csv模块&#xf…