自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(433)
  • 问答 (1)
  • 收藏
  • 关注

原创 面试题:React的真实DOM和虚拟DOM的区别

然而通过虚拟DOM来完成的话,同样的更新10个节点,虚拟DOM不会马上操作DOM,而是把10次更新的diff内容保存在本地内存的一个js对象上,最后才把这个js对象转化为真实DOM。在React中,ReactDOM.render()函数将虚拟DOM节点插入到真实DOM节点上,并且渲染到页面上。在创建虚拟DOM的目的就是为了更好将虚拟节点渲染到页面上,虚拟DOM对象的节点与真实DOM的属性是一一对应的。真实DOM,就是文档对象类型,在页面上渲染的每一个节点都是一个真实DOM结构。

2024-04-08 02:14:52 156

原创 render方法的原理是什么呢,在什么时候触发呢?

这些虚拟DOM最终是会渲染成真实DOM。在更新的过程中,React调用render方法返回的虚拟DOM树和旧的虚拟DOM进行diff比较,然后更新DOM。不管点击多少次,最终结果只打印两次。在函数组件通过useState hook来更新数据的时候,当数据没有发生变化时,就不会触发render。什么时候触发render呢?

2024-04-02 01:02:19 161

原创 谈一谈React的setState的执行机制

React组件显示什么样的数据,都是由数据状态和外部参数所决定的,这个数据状态就是state。当需要修改数据状态的值,就要调用setState,从而达到更新组件内部数据状态的目的。当点击按钮的时候,执行this.setState方法更新state状态,然后重新执行render函数,完成组件更新。setState内部是怎么定义的呢?setState的第一个参数可以是一个对象、一个函数,第二个参数是一个回调函数,用来获取更新后的状态数据。

2024-04-02 00:03:02 346

原创 怎么理解React refs,在哪些场景下使用?

React的refs,提供了一种方式,让我们访问DOM节点或者在render方法中创建React元素。

2024-04-01 20:50:41 376

原创 React组件异常捕获的解决思路

React16有一个错误边界的概念,错误边界就是一个组件,这个组件可以捕获发生在子组件树中任何位置的JavaScript错误,并且打印这些错误。错误是我们在编写代码的时候,经常出现的。比如在编写React组件的时候,因为存在JavaScript代码错误会导致React内部状态被破坏,造成整个应用崩溃。如果有一些异常,在错误边界组件不能捕获的,比如事件处理结果,异步代码操作等等。react16之后的版本,就把渲染期间发生的所有错误打印到控制台了。错误边界在渲染期间,生命周期方法和整个组件树的构造函数中捕获。

2024-03-28 22:48:27 154

原创 什么是高阶组件,有哪些场景?

在实际的应用中,高阶组件一般用来封装与业务无关,但是在多个模块中使用的功能,比如:权限控制、日志记录、数据校验、异常处理。通过传入的原始组件WrappedComponent,做一些逻辑处理,比如提取state给原始组件。高阶组件,则是接收一个或者多个组价作为入参,并且返回一个组件。高阶组件的实现方式,本质上是一个装饰者设计模式。高阶组件主要的功能是封装并且分离组件的通用逻辑,同时让逻辑在组件之间更好被复用。把通用的逻辑放在高阶组件里面,对组件实现一致的处理,从而实现代码复用。这就是高阶组件的作用。

2024-03-27 15:21:11 312

原创 React组件如何通信

父组件在调用子组件的时候,在组件标签内传递参数,子组件通过props属性获取父组件传递过来的参数。父组件在调用子组件的时候,父组件向子组件传递一个函数,通过这个函数的回调函数,获取子组件传递的值。由于React有单向数据流动的特性,所以父组件向子组件传递是最常见的方式。

2024-03-26 23:31:35 251

原创 如何理解React的state、props、super()和super(props)

为什么要调用super呢,因为子类是没有自己的this对象,它只能通过继承父类的this,然后对它进行加工。React的核心思想就是组件化,页面被切分为一些独立的、可复用的组件,组件概念上就是函数,接收一个参数作为入参,这个参数就是props,组件外部传入的数据都在props上。setState还可以接收第二个参数,它是一个函数,会在setState调用完成并且组件开始更新时被调用,在这里可以用来监听渲染是否完成。state和props都是对象,用来保存信息,props和state都能触发组件更新。

2024-03-26 22:29:16 541

原创 如何理解React

@FilePath: /blog/react/React面试题.md一、React用来构建界面的JavaScript库,它只提供了UI层面的解决方案,遵循组件设计模式,声明式编程规范和函数式编程概念。为了让前端应用程序更高效,React使用了虚拟DOM来操作真实DOM。React遵循高阶组件到低阶组件的单向数据流,帮助我们将页面划分为多个独立的小模块,每一个模块就是一个组件,这些组件之间可以组合、嵌套,构成一个整体的页面。

2024-03-24 17:21:30 241

原创 JavaScript:查找两个正序数组的中位数

中位数:统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。要在两个正序数组中找中位数,首先把两个正序数组组合为一个数组,然后进行排序。

2024-03-12 23:09:02 380

原创 用JavaScript来查找无重复字符的最长子串

JavaScript的哈希表Map保存键值对,并记住键的原始插入顺序。任何值(对象或原始值)都可以作为一个键或一个值。通过定义一个可以移动的“窗口”,并且在这个窗口内进行操作,寻找满足条件的最大区间或者最小区间的子序列长度。滑动窗口算法是一种用来处理数组或者字符串中连续子集问题的有效方法。

2024-03-12 00:07:35 385

原创 React Fiber的原理

React Fiber是React 16及更高版本中引入的一种新的核心算法,它作为React内部调度机制的重构部分,对原有的Reconciliation(协调)过程进行了升级。Fiber架构的目标是提高React在复杂应用中的性能和可预测性,并支持异步渲染、优先级调度等功能。总之,React Fiber通过改进React内部的工作机制,使React具备了更优秀的性能优化手段,提升了用户体验,并且为未来的框架功能扩展提供了更加灵活的基础架构。

2024-03-11 23:12:58 103

原创 VUE的几个面试题

复习一下VUE的面试吧,或许有用呢?

2024-03-06 23:19:44 447

原创 两数相加的问题

在解答这个题目过程中还运用到进位,首先回顾一下,什么是链表?

2024-03-03 23:33:00 354

原创 一个网络请求是怎么进行的?

一个网络请求是怎么进行的,涉及到浏览器的运行机制、页面加载流程。当我们打开一个页面的时候,可以在NetWork面板上看到浏览器发起的网络请求,包括了页面、图片、CSS样式文件以及请求的状态,请求耗时和响应内容等等信息。

2024-02-19 23:36:01 439

原创 如果面试被问Promise相关问题,我想可以这样回答

创建一个Promise的时候,给Promise构造函数传一个执行器函数,这个执行器函数接收两个参数,分别是resolve和reject,resolve是用来改变Promise状态为fulfilled,reject是用来改变Promise状态为rejected的。Promise.race,也是将多个异步操作并行执行,但是只要有一个Promise实例发生状态改变,那么Promise.race就返回这个Promise实例的结果。当有一个请求失败的时候,就会进入reject方法。

2024-02-04 16:01:42 348

原创 Electron在MAC上打包报错:app-builder_arm64 process failed ERR_ELECTRON_BUILDER_CANNOT_EXECUTE的解决方案

在MAC上创建Electron应用打包的时候报错:app-builder_arm64 process failed ERR_ELECTRON_BUILDER_CANNOT_EXECUTE。原因是本地缓存中没有打包需要的依赖包,比如electron-v25.9.8-darwin-arm64.zip,所以打包的时候,会自动去下载对应的依赖包。之所以报错,是因为远程下载的时候,会有很多原因导致下载终端,比如网络原因等。所以我们只能手动下载依赖包,然后放到缓存文件夹中。

2024-01-31 10:03:45 467

原创 我也玩一下鸿蒙开发

鸿蒙是一个主打“I + 8 + N”的全场景、分布式的操作系统,基于一套系统能力,适配多种终端形态的分布式理念,把多个物理上相互分离的设备融合成一个“超级虚拟终端”,通过按需调用、融合不同软件硬件的能力,在不同终端之间实现快速连接、资源共享。一、分布式软总线,是多种终端设备的统一基座,是分布式数据管理和分布式任务调度的基础,为设备之间的互联提供了分布式通信能力,能够快速发现并且连接设备。二、分布式数据管理,把多设备的应用程序数据和用户数据进行同步管理,应用跨设备运行的时候,数据无缝衔接。

2023-12-03 23:18:40 443

原创 CSS:这几个伪类,你用了吗

root 伪类是匹配文档的根元素,很多时候,根元素也就是 html 元素,用 root 伪类来匹配根元素,目的就是解决根元素不是 html 的场景,比如根元素是 svg 的时候。root 伪类的使用场景,我们引入某些 UI 库,很多时候,需要重置一些样式,就可以使用 root 伪类,这样就不担心重置的样式不生效了。至于哪种方式好点,就得看看团队的编码规范了。:first-of-type表示当前第一个标签类型的元素,:last-of-type伪类的语法和匹配规则与:first-of-type的类似。

2023-11-30 00:09:08 424

原创 CSS逻辑组合伪类

CSS 的逻辑组合伪类有 4 种,分别是::not()、:is()、:where()和:has()。

2023-11-29 00:19:55 821

原创 Electron+VUE3开发简版的编辑器【文件预览】

主要技术栈是VUE3、Electron和Nodejs,VUE3做页面交互,Electron提供一个可执行Nodejs的环境以及支撑整个应用的环境,nodeJS负责读取文件内容。环境配置、安装依赖这些步骤就不再叙述了。

2023-11-24 00:41:04 1318

原创 Electron应用程序生命周期的监听

Electron 是在主进程中控制生命周期,在不同的生命周期事件中,执行不同的逻辑。Electron 主进程有一个对象 app,对象上有个属性 on ,是一个函数,接收两个参数,第一个参数是我们要监听的事件名称,第二个参数是回调函数。

2023-11-09 01:09:22 470

原创 Electron进程通信的另一种方式

这里我们使用的是 ipcMain.on 和 ipcRenderer.send。除了这两种方式,Electron 还提供了ipcMain.handle 和 ipcRenderer.invoke 方法。不同的是 ipcMain.handle 和 ipcRenderer.invoke 方法是异步调用的风格,可以根据自己的规范选择合适的 API。上一篇讲述了主进程和渲染进程之间的通信,其中是通过调用 ipcMain 和 ipcRenderer 来完成的。

2023-11-07 12:19:55 349

原创 Electron + VUE3 桌面应用,主进程和渲染进程通信

注意:如果是Typescrip环境的话,有可能会报错提示window上不存在electron,那就需要把这些API挂在到window对象上就可以。在开发Electron应用的时候,从安全的角度来考虑,尽量不要在渲染进程中,直接调用ElectronAPI,因此我们需要预加载JS脚本,在这个脚本中,把我们用到的API暴露出去。之前写过篇主进程和渲染进程之间的通信,这里主要是记录一下VUE版本的应用,主进程和渲染进程之间的通信。思路是一样,唯一不同的是代码。这就是在VUE组件中,主进程和渲染进程之间的通信。

2023-11-06 01:36:57 293

原创 HTML、CSS和JavaScript,实现换肤效果的原理

这篇涉及到HTML DOM的节点类型、节点层级关系、DOM对象的继承关系、操作DOM节点和HTML元素还用到HTML5的本地存储技术。换肤效果的原理:是在选择某种皮肤样式之后,通过JavaScript脚本来加载选中的样式,再通过localStorage存储。先来回忆一下HTML DOM的相关知识。

2023-11-01 20:25:35 809

原创 简单了解一下:NodeJS的WebSocket网络编程

NodeJS的webSocket网络编程。那什么是WebSocket呢?WebSocket是HTML5提供的一种浏览器和服务器进行通信的网络技术。两者之间,只需要做一个握手动作,就可以在浏览器和服务器之间开启一条通道,就可以进行数据相互传输。

2023-10-24 12:55:52 435

原创 简单了解一下:NodeJS的fs文件系统

NodeJS提供了fs模块来本地文件。

2023-10-22 21:25:26 259

原创 简单了解一下:Node的util工具模块

了解util模块,知道怎么使用util来格式化字符串,把对象转化为字符串,检查对象类型。那么util模块有哪些方法呢?

2023-10-19 23:48:33 129

原创 简单了解一下:Node全局对象和事件监听和触发

Node的全局对象,就是整个应用都能引用的对象。Node本身内置了多个全局变量、全局对象和全局函数。全局变量有两个:__filename和__dirname,__filename:表示当前正在执行的脚本文件名;__dirname:当前脚本所在的目录;

2023-10-19 19:22:57 226

原创 Node基础概念,先了解一下

Nodejs是基于Chrome V8引擎的服务器端JavaScript运行环境,也就是说可以在浏览器之外的主机上运行JavaScript。

2023-10-11 23:43:46 226

原创 Koa处理请求数据

在开发中,后端接收到请求参数后,需要解析参数。请求分为很多种类型,比如常见的get和post。

2023-10-01 15:10:08 911

原创 koa基础应用

不要把koa想得太复杂,他就是一个Node框架而已。执行命令:node app.js。然后在浏览器中打开http://localhost:3000/,页面显示:hello Koa。

2023-09-30 22:15:08 311

原创 《程序员的成长课》

最近悦读和一些思考,就留下这点笔记了。

2023-09-29 23:34:29 98

原创 Vue3:组件的生命周期函数

这一篇博客是结合官网完档和书籍后整理的,会很简单,可能对很对朋友都没有任何的帮助,这只是我对自己的学习vue这个技术栈的笔记。

2023-09-19 00:51:08 215

原创 vue-h5:移动Web单击事件和延迟300ms的问题

在PC端的网页,大部分的交互是通过click事件来实现的,然而在移动端,则是通过touch事件来实现触摸交互。单击或者点击事件,指的是鼠标按下并且在短时间内放开【一般是小于300ms】。那么移动端,也是类似,在手指触摸到屏幕开始计算时间,并且在300ms内离开屏幕。这就是移动端的单击事件,手指触摸成为touch。

2023-09-19 00:30:42 657

原创 JavaScript:二进制数组【笔记】

二进制数组【ArrayBuffer对象、Type的Array视图和DataView视图】JavaScript操作二进制数据的一个接口。这些接口原本是和WebGL有关【WebGL是浏览器与显卡之间的通信接口】,为了满足JavaScript与显卡之间大量、实时数据交换,那么JavaScript和显卡之间的数据通信必须是二进制。不能是传统的文本格式。所谓的文本格式,就是传递一个32位整数,两端的JavaScript和显卡都要进行数据格式化,这样非常耗时。

2023-09-17 22:42:27 229

原创 vue-h5移动Web的rem配置

H5移动的适配方案。

2023-09-16 22:53:50 511

原创 vue-h5移动Web的Flex布局

Flexible的优点是,不需要对元素设置固定的宽度和高度,元素的位置和大小也会跟着父元素或者浏览器的状态来自动适配。注意:父元素设置为flex后,子元素的float、clear和vertical-align的设置就会失效。弹性容器有两个方向:水平方向和垂直方向,弹性容器的子元素默认沿着水平方向排列。该属性是flex-direction和flex-wrap的缩写,即一个属性可以实现设置两个属性的功能。尽管有很多的浏览器已经实现了无前缀的版本,但是在系统比较旧版本的移动端设备上,只能带上前缀。

2023-09-15 23:26:22 282

原创 vue移动端页面适配

页面的适配,就是一个页面能在PC端正常访问,同时也可以在移动端正正常访问。现在我们可以通过弹性布局【Flexible布局】、媒体查询和响应式布局。除此之外,还可以通过rem和vw针对性地解决页面适配问题。

2023-09-14 23:10:43 831 1

原创 input标签,新增那些属性

input标签作为页面与用户交互的重要入口,了解掌握input的属性,至为重要。

2023-09-14 00:37:20 299

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除