首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
react18专题
浅谈Vue3和React18
Vue 3 和 React 18都是现代前端开发中非常流行的框架,它们各自引入了许多新特性和改进。下面我们将分别介绍 React 18 和 Vue 3 的一些关键特性,并对比它们的主要差异。 Vue 3 的新特性 Vue 3 也带来了一系列改进和新功能,以提高性能、增强开发者体验,并提供更多灵活的编程模型。 Composition API: Vue 3 引入了 Composition AP
阅读更多...
手把手教你用vite+React18+TS+redux+prettier+eslint+Ant打造企业级前端项目
通过这篇文章你可以学到 如何使用使用 webpack 搭建项目如何在 webpack中集成 typescript如何在 webpack 中集成 React Router 和 Redux如何使用 React 的组件库 Ant Design如何在项目中集成 eslint 和 prettier 保证代码质量如何为团队开发专属的项目模板 环境依赖版本 node:v18.13.0npm -vvite:
阅读更多...
【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑
Reconciler 使React核心逻辑所在的模块,中文名叫协调器,协调(reconciler)就是diff算法的意思 reconciler有什么用? 在前端框架出现之前,通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库,开发者需要直接调用浏览器的宿主环境 API,例如 DOM 操作等。这意味着开发者需要手动管理页面状态和交互,通过执行一系列的操作来更新页面。
阅读更多...
React18中各种Hooks用法总结( 内附案例讲解)
React中各种Hooks用法总结 内附案例讲解 一、useState useState 是一个 React Hook,它允许你向组件添加一个 状态变量。 import React, { FC, memo, useState } from 'react'import { MainContainer } from './style'interface IProps {children?:
阅读更多...
【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render
常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render();类组件 this.setState();函数组件 useState useEffect; 我们希望实现一套统一的更新机制,他的特点是: 兼容上述触发更新的方式方便后续拓展(优先级机制) 更新机制的组成部分 代表更新的数据结构 Update消费update的数据结构——Up
阅读更多...
【从0实现React18】 (一) 项目初始化
Multi-repo 和 Mono-repo 由于需要同时管理多个包,如React、React-dom等,所以选择**Mono-repo** 选择使用pnpm-workspace搭建Mono-repo环境的原因 依赖安装快更规范 Pnpm初始化 npm install -g pnpmpnpm init 配置pnpm-workspace.yml文件 pnpm-workspa
阅读更多...
react18【系列实用教程】useCallback —— 缓存函数 (2024最新版)
当父组件向子组件传递了函数,也会引发 memo 缓存组件失效,因为函数也是引用类型的数据,父组件重新渲染时,传给子组件的函数的内存地址也会重新生成,引发子组件重新渲染。 const printNum = () => {console.log("打印 num :", num);}; <Child2 printNum={printNum} /> useCallback 的使用场景
阅读更多...
react18【系列实用教程】组件 (2024最新版 | 含父子组件传值、兄弟组件传值、越层组件传值、“插槽“)
什么是组件? 一个组件就是用户界面的一部分,它可以有自己的逻辑和外观。 组件之间可以互相嵌套,也可以复用多次 为什么要用组件? 组件能让开发者像搭积木一样快速构建一个完整的庞大应用,大大提升了开发效率,降低了维护成本,因此当下前端的主流开发模式即组件化开发 定义组件 react 中的组件有以下特征: 是一个首字母大写的函数函数的返回值是一段 JSX 代码,用于渲
阅读更多...
react18封装公共请求函数
如果里面要处理比如token过期,跳转登录这种情况的话,官方又说组件外不允许使用Hooks函数,这里可以这样做 使用redux 并新建一个store/index.ts import { configureStore, combineReducers } from '@reduxjs/toolkit'import counterRouter from './modules/router'im
阅读更多...
react18+ts如何生成二维码并且下载
目录 一、下载qrcode.react 二、引入qrcode.react 三 、编写下载二维码的函数 在react开发中如果需要二维码,笔者选择使用qrcode.react来快速生成。 一、下载qrcode.react pnpm add qrcode.react 二、引入qrcode.react import {Box,Stack,Fab} from '@mui/materia
阅读更多...
react18【系列实用教程】JSX (2024最新版)
为什么要用 JSX? JSX 给 HTML 赋予了 JS 的编程能力 JSX 的本质 JSX 是 JavaScript 的语法扩展,浏览器本身不能识别,需要通过解析工具(如babel)解析之后才能在浏览器中运行。 bable 官网可以查看解析过程 JSX 的语法 {} 中写 JS 表达式 类似 vue 的 {{}} 渲染 JS 数据 对象 <div sty
阅读更多...
React18+TS+NestJS+GraphQL 全栈开发在线教育平台
React18+TS+NestJS+GraphQL 全栈开发在线教育平台 React18+TypeScript+NestJS+GraphQL:全栈开发在线教育平台的无懈可击组合 随着科技的进步和互联网的普及,在线教育平台逐渐成为人们获取知识的重要途径。为了提供更加优质、高效的教育服务,我们需要选择一套强大而稳定的技术栈。本文将介绍React18、TypeScript、NestJS和Grap
阅读更多...
react18 antd 引入导航栏之后一些bug,解决方法收集
概述: 我们开发react引入antd之后导航栏会出现刷新不选中、不展开二级导航栏、页面js点击之后不选中最新tab、只能展开一个二级tab之类的问题。那么我们一起来把问题给解决了 问题描述 其实问题这些问题差不多就是一个问题,就是Menu没有刷新选中的状态 实现代码 import React, { useState ,useEffect } from 'react';import
阅读更多...
React18源码: Fiber树的初次创建过程图文详解
fiber树构造(初次创建) fiber树构造的2种情况: 1.初次创建 在React应用首次启动时,界面还没有渲染此时并不会进入对比过程,相当于直接构造一棵全新的树 2.对比更新 React应用启动后,界面已经渲染如果再次发生更新,创建新fiber之前需要和旧fiber进行对比最后构造的fiber树有可能是全新的,也可能是部分更新的 这里重点关注初次创建这种情况,主要突出fiber树构造过程
阅读更多...
React18源码: Fiber树中的优先级与帧栈模型
优先级{#lanes} 在全局变量中有不少变量都以Lanes命名 如workInProgressRootRenderLanes, subtreeRenderLanes其作用见上文注释它们都与优先级相关 React中有3套优先级体系,并了解了它们之间的关联关系现在来看下fiber树构造过程中,车道模型Lane的具体应用在整个react-reconciler包中,Lane的应用可以分为3个方面:
阅读更多...
React18源码: Fiber树中的全局状态与双缓冲
Fiber树构造 在React运行时中,fiber树构造位于 react-reconciler 包在正式解读 fiber 树构造之前,再次回顾一下renconciler的4个阶段 1.输入阶段:衔接react-dom包,承接fiber更新请求2.注册调度任务:与调度中心(scheduler包)交互,注册调度任务task,等待任务回调3.执行任务回调:在内存中构造出fiber树和DOM
阅读更多...
React18源码: reconcliler启动过程
Reconcliler启动过程 Reconcliler启动过程实际就是React的启动过程位于react-dom包,衔接reconciler运作流程中的输入步骤.在调用入口函数之前,reactElement(<App/>) 和 DOM对象 div#root 之间没有关联,用图片表示如下: 在启动时,在React内部,一般来说,会生成3个对象,都是全局对象 创建全局对象 1 )R
阅读更多...
React18源码: task任务调度和时间分片
任务队列管理 调度的目的是为了消费任务,接下来就具体分析任务队列是如何管理与实现的 在 Scheduler.js 中,维护了一个 taskQueue, 任务队列管理就是围绕这个 taskQueue 展开 // Tasks are stored on a min heapvar taskQueue - [];var timerQueue = []; 注意 taskQueue一个堆数源
阅读更多...
React18源码: React中的LanePriority和SchedulerPriority
优先级区别和联系 在源码中,3种优先级位于不同的js文件,是相互独立的注意: LanePriority 和 SchedulerPriority 从命名上看,它们代表的是优先级ReactPriorityLevel 从命名上看,它代表的是等级而不是优先级 它用于衡量 LanePriority 和 Schedulerpriority LanePriority LanePriority: 属
阅读更多...
React18源码: reconciler执行流程
reconciler执行流程 1 )概述 此处先归纳一下react-reconciler包的主要作用,将主要功能分为4个方面: 输入:暴露api函数(如:scheduleUpdateOnFiber), 供给其他包(如react包)调用注册调度任务:与调度中心(scheduler包)交互,注册调度任务task,等待任务回调执行任务回调:在内存中构造出fiber树,同时与渲染器(react-d
阅读更多...
react18加antd新手上路使用
第一次使用react和antd组件库,记录过程中实用的几个组件和使用方法; 项目中依赖版本 "react": "^18.2.0","antd": "^5.3.0", Input关闭历史填充 <Input placeholder="请输入ID/名称" allowClear autoComplete="off"/> Popover组件使用 <Popover></Popov
阅读更多...
React18原理: React核心对象之ReactElement对象和Fiber对象
React中的核心对象 在React应用中,有很多特定的对象或数据结构.了解这些内部的设计,可以更容易理解react运行原理列举从react启动到渲染过程出现频率较高,影响范围较大的对象,它们贯穿整个react运行时 如 ReactElement 对象如 Fiber 对象 其他过程的重要对象 如事件对象(位于react-dom/events保障react应用能够响应ui交互)如 ReactCon
阅读更多...
React18原理: 时间分片技术选择
渲染1w个节点的不同方式 1 )案例1:一次渲染1w个节点 <div id='root'><div><script type="text/javascript">function randomHexColor() {return "#" + ("0000"+ (Math.random() * 0x1000000 << 0).toString(16)).substr(-6);}setTime
阅读更多...
React18原理: 核心包结构与两大工作循环
React核心包结构 1 ) react react基础包,只提供定义 react组件(ReactElement)的必要函数一般来说需要和渲染器(react-dom,react-native)一同使用在编写react应用的代码时, 大部分都是调用此包的api比如, 我们定义组件的时候,就是它提供的class Demo extends React.Component {render() {r
阅读更多...
react18中,useState 和 useEffect有什么区别
useState 目的:useState用于在函数组件中添加状态。之前,只有类组件才能有自己的状态,但useState钩子使得函数组件也能够利用React的状态特性。 使用场景:当你需要在组件中存储、读取或更新一些数据时使用。例如,控制输入框的内容、切换按钮的状态等。 工作原理:useState为组件提供了状态变量和一个更新这个状态的函数。当状态变化时,组件会重新渲染,以反映最新的状态。
阅读更多...
React18原理: 再聊Fiber架构下的时间分片
时间分片 react的任务可以被打断,其实就是基于时间分片的人眼最高能识别的帧数不超过30帧,电影的帧数差不多是在24浏览器的帧率一般来说是60帧,也就是每秒60个画面, 平均一个画面大概是16.5毫秒左右浏览器正常的工作流程是运算渲染,运算,渲染运算渲染在浏览器里面一个运算,加上一个渲染就是一帧总的来讲,可以理解为下面这张图 比如 frame 是一帧,一个 Frame 就是16毫秒
阅读更多...