react笔记(React18)

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

关于状态提升

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

关于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.rhkb.cn/news/408774.html

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

相关文章

Vodafone 推出了与 Wi-Fi 竞争的基于树莓派私人5G技术

随着全球5G网络的逐步推出&#xff0c;在其过程中遇到了可预见的起起伏伏&#xff0c;并且蜂窝技术也开始进入另一个无线技术 Wi-Fi &#xff0c;并且已经占据的市场。私有5G网络&#xff08;即个人或公司建立自己的全设施蜂窝网络&#xff09;如今正在寻找曾经属于Wi-Fi的唯一…

openai whisper使用

whisper使用 介绍 Whisper是一种通用的语音识别模型。它是在大量不同音频数据集上训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音翻译和语言识别。 GitHub&#xff1a;https://github.com/openai/whisper 论文链接&#xff1a;https://arx…

SQL Server 2017上服务端设置强制加密启用SSL

在数据库服务端设置&#xff0c;强制所有客户端使用 SSL&#xff0c;设置完后&#xff0c;后续客户端所有连接&#xff0c;都将以密文传送&#xff0c;不论客户端是否指定安全连接&#xff08;即EncryptTrue/False&#xff09; 一、服务端强制加密使用 SSL 1.在数据库服务器上…

微服务事务管理

目录 一、分布式事务问题 1、本地事务 2、分布式事务 3、分布式事务问题 二、理论基础 1、CAP定理 &#xff08;1&#xff09;一致性 &#xff08;2&#xff09;可用性 &#xff08;3&#xff09;分区容错 &#xff08;4&#xff09;矛盾 2、BASE理论 3、解决分布式…

Java学习_21_多线程JUC

文章目录 前言多线程并发与并行多线程的实现方式Thread类Runnable接口Callable接口和Future接口 Thread类的相关方法线程对象线程优先级守护线程出让线程/礼让线程插入线程/插队线程 线程的相关问题生命周期安全问题Lock锁死锁等待唤醒机制&#xff08;生产者和消费者&#xff…

Flex的基本使用+综合案例

组成 弹性盒子没有设置高&#xff0c;就会自动拉伸 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&q…

GCB | 首次揭示!气候变化对常绿和落叶植物物候差异化影响的机制

气候变化引起的植物物候改变已对全球范围内生物多样性和生态系统产生重大影响&#xff08;Nature高引文章 | 北京大学朴世龙院士等&#xff1a;全球变暖对植被物候的影响及其机制&#xff1b;Nature Ecology & Evolution | 南京大学张永光教授团队揭示延长的植被物候期受CO…

【日记】狗尾巴草与暗恋(1519 字)

写在前面 消极内容注意 正文 好想吃火龙果。 下周会变得异常艰难。因为事情已经垒到天上去了&#xff0c;还要来检查。 上午&#xff0c;同事送了一点水果&#xff0c;我从来没见过。问了一下别人&#xff0c;有的说是灯笼果&#xff0c;有的说是菇凉果、姑娘果。搜了一下&am…

go const(常量)

常量介绍 示例 package mainimport ("fmt" )func main() {const name "tom"fmt.Println(name)const tax float64 0.8fmt.Println(tax) }go run const.go tom 0.8package mainimport ("fmt" )func main() {const a intfmt.Println(a) }go run…

【Excal】OR 函数

语法&#xff1a; OR&#xff08;判断条件1&#xff0c;判断条件2&#xff0c;判断体件3&#xff0c;****&#xff09; 评优条件&#xff1a; 语文成绩高于90 数学成绩高于90 英语成绩高于85 物理成绩高于85 点击回车键 选中填充 回车 选中填充

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 云服务器的准备 2.0 Xshell 和 Xftp 软件 2.1 Xshell 介绍 2.2 Xftp 介绍 3.0 在云服务器进行环境配置 3.1 安装 JDK 3.2 安装 MySQL 3.3 安装 Nginx 4.0 SpringB…

论文降重,Kimi如何助你一臂之力?

在学术研究的浪潮中&#xff0c;原创性和学术诚信是每位研究者必须坚守的灯塔。然而&#xff0c;随着研究领域的不断扩展和深化&#xff0c;论文写作过程中难免会遇到内容重复的问题&#xff0c;这不仅影响论文的独创性&#xff0c;也对学术声誉构成挑战。本文将介绍Kimi的核心…

darnet 识别检测本地视频 保存本地视频

darnet 识别检测本地视频 保存本地视频 darknet的github下载 darknet的github下载 darknet地址 将这个下载后&#xff0c;保存在catkin_ws的src目录下

红黑树、B+Tree、B—Tree

红黑树 B-Tree 这三个通常都是把内存全部加载到内存里,然后再内存中进行处理的,数据量通常不会很大。 内存一般容量都在GB级别,比如说现在常见的4G、8G或者16G。 如果要处理的数据规模非常大,大到内存根本存不下的时候。这个时候只能先存到硬盘里,硬盘呢 容量又比内存大…

谈一谈什么是接口测试?怎样做接口测试?

扫盲内容&#xff1a; 1.什么是接口&#xff1f; 2.接口都有哪些类型&#xff1f; 3.接口的本质是什么&#xff1f; 4.什么是接口测试&#xff1f; 5.问什么要做接口测试&#xff1f; 6.怎样做接口测试&#xff1f; 7.接口测测试点是什么&#xff1f; 8.接口测试都要掌…

mysql数据库----简单认识库的操作

目录 1.区分概念 2.什么是数据库 3.数据库的创建和销毁 4.数据库编码初识 5.查询系统默认编码配置 6.两个查询编码表的指令 7.创建指定编码的数据库 8.不同编码的区别 第一个编码方式&#xff1a; 第二个编码方式&#xff1a; 查询结果说明&#xff1a; 9.数据库的增…

React学习day01-React-开发环境配置、JSX基础-本质、JSX中js表达式的用法、JSX的条件渲染

1、React &#xff08;1&#xff09;概念&#xff1a;由Meta公司研发&#xff0c;是一个用于构建Web和原生交互页面的库 &#xff08;2&#xff09;优点&#xff1a; 1&#xff09;相较于传统基于DOM开发的优势&#xff1a;组件化的开发方式、不错的性能 2&#xff09;相较于…

QT实例1--使用UI文件创建登陆窗口

基础信息 平台&#xff1a;window 10 QT版本 &#xff1a;5.14.2 时间:2024.08.25 本工程是QLayout专题,使用UI文件创建一个登陆窗体 本例程原始资料来源于B站&#xff0c;UP主“爱编程的大丙”的视频教程《QT开发编程-入门基础教程QT5–6.2窗口布局举例-制作一个登陆界面》…

Web开发:ORM框架之Freesql的入门和技巧使用小结

目录 零、官网链接 一、字段映射表 二、基础查询 1.freesql独特封装&#xff1a;between关键字查日期 2.分页&#xff08;每页 20 条数据&#xff0c;查询第 1 页&#xff09; 3.Withsql&#xff08;子查询&#xff0c;不建议&#xff09; 3.简单查询、映射查询 4.参数查…

数据结构(Java):揭开二叉搜索树删除机制的奥秘

目录 1、二叉搜索树 1.1 概念 2、代码模拟实现 2.1 插入操作 2.2 查找操作 2.3 &#x1f31f;删除操作&#x1f31f;&#xff08;难点&#xff09; 2.3.1 要删除节点的左子树为空 2.3.2 要删除节点的右子树为空 2.3.3 要删除节点的左右子树均不为空 2.3.4 删除操作代码…