自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(220)
  • 收藏
  • 关注

原创 border影响父元素的高度-解决方案

现象:在为Menu组件添加样式时发现,当我点击某个tab时父元素的高度会撑开,原因是boder-bottom设置为2px,第一反应是将border-sizing设置为border-box,使得和属性包括内容,内边距和边框,但不包括外边距。但是无效,因为我没有为父元素设置宽高。 1655864862453解决:换一种方法解决,在menu-item添加border-bottom的样式与点击时的样式一样,但颜色设置为transparent就行! 1655865242469...

2022-06-22 10:50:05 1005 1

原创 3 .前端性能优化-使用Lighthouse测试性能

前端性能优化-使用Lighthouse测试性能

2022-06-11 23:02:09 1937

原创 Cannot find module ‘@babel/runtime/helpers/builtin/interopRequireDefault‘

报错:可能报两个错误原因:一开始我以为babel转es6失败,重新安装@babel/runtime发现问题没能解决,当我去node_modules里面查找‘babel/runtime/helpers/builtin/interopRequireDefault'路径时发现没有builtin这个文件夹,尝试把helpers下的一堆js文件复制到新建builtin文件夹中,重新运行后成功!解决: 2.在helpers文件夹下新建builtin文件夹,并把helpers下的js文件全都复制到builtin

2022-06-11 14:01:25 2291

原创 1.前端性能优化-介绍

前端性能优化-介绍

2022-06-10 14:02:43 223

原创 2.前端性能优化-web性能指标

web性能指标

2022-06-10 14:00:52 2182

原创 mobx装饰器报错

报错:Parsing error: This experimental syntax requires enabling one of the following parser plugin(s): "decorators-legacy", "decorators".原因:这个实验性语法需要启用以下解析器插件之一:"decorator -legacy", "decorator "解决:安装babel插件转换器即可yarn add @babel/plugin-proposal-decorator

2022-05-16 17:06:32 2964

原创 【ts类型体操】03312-easy-parameters

需求:实现内置的 Parameters 类型,而不是直接使用它,可参考TypeScript官方文档type MyParameters<T extends (...args: any[]) => any> = anyimport type { Equal, Expect } from '@type-challenges/utils'const foo = (arg1: string, arg2: number): void => {}const bar = (arg1

2022-05-09 23:29:22 324

原创 【ts类型体操】03060-easy-unshift

需求:实现类型版本的 Array.unshift。type Unshift<T extends any[], U> = anyimport type { Equal, Expect } from '@type-challenges/utils'import { ExpectFalse, NotEqual } from '@type-challenges/utils'type cases = [ Expect<Equal<Unshift<[], 1>,

2022-05-09 23:24:17 232

原创 【ts类型体操】03057-easy-push

需求:在类型系统里实现通用的 Array.push 。type Push<T extends any[], U> = anyimport type { Equal, Expect } from '@type-challenges/utils'import { ExpectFalse, NotEqual } from '@type-challenges/utils'type cases = [ Expect<Equal<Push<[], 1>, [1]

2022-05-09 23:20:35 285

原创 【ts类型体操】00898-easy-includes

需求:在类型系统里实现JavaScript的Array.includes方法,这个类型接受两个参数,返回的类型要么是true要么是false。type Includes<T extends readonly any[], U> = anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<Includes<['Kars',...

2022-05-09 23:15:39 684

原创 【ts类型体操】00533-easy-concat

需求:在类型系统里实现 JavaScript 内置的 Array.concat 方法,这个类型接受两个参数,返回的新数组类型应该按照输入参数从左到右的顺序合并为一个新的数组。type Concat<T extends any[], U extends any[]> = anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<Concat&lt

2022-05-09 23:03:45 407

原创 【ts类型体操】00268-easy-if

需求:实现一个 IF 类型,它接收一个条件类型 C ,一个判断为真时的返回类型 T ,以及一个判断为假时的返回类型 F。 C 只能是 true 或者 false, T 和 F 可以是任意类型。type If<C extends boolean, T, F> = anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<If<true, '

2022-05-09 11:40:09 194

原创 【ts类型体操】00189-easy-awaited

需求:假如我们有一个 Promise 对象,这个 Promise 对象会返回一个类型。在 TS 中,我们用 Promise 中的 T 来描述这个 Promise 返回的类型。type MyAwaited<T extends Promise<any>> = anyimport type { Equal, Expect } from '@type-challenges/utils'type X = Promise<string>type Y = Promis

2022-05-09 11:12:11 398

原创 【ts类型体操】00043-easy-exclude

需求:实现内置的Exclude类型,但不能直接使用它本身。type MyExclude<T, U> = anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<MyExclude<'a' | 'b' | 'c', 'a'>, Exclude<'a' | 'b' | 'c', 'a'>>..

2022-05-09 11:00:06 228

原创 【ts类型体操】00018-easy-tuple-length

需求:创建一个通用的Length,接受一个readonly的数组,返回这个数组的长度。type Length<T extends readonly any[]> = anyimport type { Equal, Expect } from '@type-challenges/utils'const tesla = ['tesla', 'model 3', 'model X', 'model Y'] as constconst spaceX = ['FALCON 9', 'F

2022-05-08 22:52:46 254

原创 【ts类型体操】00014-easy-first

需求:实现一个通用First<T>,它接受一个数组T并返回它的第一个元素的类型。type First<T extends readonly any[]> = anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<First<[3, 2, 1]>, 3>>, Expect<Equal<Fir

2022-05-08 22:45:25 848

原创 【ts类型体操】00011-easy-tuple-to-object

需求:传入一个元组类型,将这个元组类型转换为对象类型,这个对象类型的键/值都是从元组中遍历出来。type TupleToObject<T extends readonly any[]> = anyimport type { Equal, Expect } from '@type-challenges/utils'const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as consttype cases = [ Ex

2022-05-08 22:22:09 504 6

原创 【ts类型体操】00007-easy-readonly

需求:实现一个MyReadonly,该 Readonly 会接收一个 泛型参数,并返回一个完全一样的类型,只是所有属性都会被 readonly 所修饰。type MyReadonly<T> = anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<MyReadonly<Todo1>, Readonly<Todo1>&

2022-05-08 22:13:13 315 1

原创 【ts类型体操】00004-easy-pick

要求:实现TS内置的Pick<T,K> 从类型T中选择出属性K,构造一个新的类型type MyPick<T, K>=anyimport type { Equal, Expect } from '@type-challenges/utils'type cases = [ Expect<Equal<Expected1, MyPick<Todo, 'title'>>>, Expect<Equal<Expected2,

2022-05-06 17:46:33 361

原创 Install fail Error: Unsupported URL Type “workspace:“: workspace:*

背景:在尝试npm i初始化失败,报错信息为:Install fail! Error: Unsupported URL Type "workspace:": workspace:*原因:检查package.json中的项目依赖版本是否出现[workspace:]。如果使用npm i来安装,它会出现 "不支持的URL类型 "workspace:": workspace:"。如果使用yarn来安装,就ok!解决:1.安装yarnnpm install -g yarn2.安装某个包

2022-04-28 11:23:55 23936 7

原创 关于react中的state整理

react怎么检测到数据的变化?react状态变化只能通过setState(),调用setState()就会更新状态重新渲染dom为什么不直接更新state?1.如果试图直接更新state,则不会重新渲染组件2.需要使用setState()方法去更新state,它调度对组件state对象的更新,组件通过重新渲染来响应react中,在执行setState()方法后发生了什么?咱们可以将“render”分为两个步骤:1.虚拟DOM渲染:当render方法被调用时,它会返回一个新的

2022-04-21 11:55:08 1022

原创 React 16.6的懒加载组件

React 16.6 添加了一个使代码拆分更容易的新功能:React.lazy()。我们通过一个小演示看看如何以及为什么要使用此功能。我们有一个显示股票列表的应用程序,当单击一只股票时,它会显示一个图表:可以去github下载源码GitHub - pomber/react-lazy-preload-demo: Lazy loading (and preloading) components in React16.6Lazy loading (and preloading) components..

2022-04-14 19:21:15 823 1

原创 新冠疫情数据实时显示-next.js

假设咱们要构建一个显示冠状病毒统计数据的网站,主页显示每个国家/地区的信息,并带有指向更多详细信息的链接。 所有数据都来自一个 JSON 文件,咱们可以从公共 URL 下载该文件,该文件每天更新一次。可以尝试考虑如何构建该网站,然后了解咱们上篇所说的Next.js 9.3 的方法。...

2022-04-13 15:09:57 461 1

原创 超超超认真的next.js学习笔记-获取数据

浏览器访问网站的流程:输入一个网址,浏览器获取一个HTML页面,但这会页面没有数据,使用fetch发请求获取数据并使用useStates设置state,state发生变化,这是render函数再一次去渲染页面,因此这个流程中咱们有两个渲染周期。而我们使用next.js则是利用第一个渲染周期进行预渲染,减少首页白屏显示时间。在next.js中文网中我们知道Next.js 有两种预渲染形式:静态生成和服务器端渲染静态生成:如果一个页面使用了静态生成,在页面构建时将生成对应的HTML文件,意味着在生产环

2022-04-12 15:02:33 4747 3

原创 找回git pull丢失的代码

现状:拉取最新的代码【git pull 拉取分支名字 】但未提交自己写的代码后发现原先写的代码都被最新代码覆盖了。解决:先【git log】查看上次拉取最新版本 复制对应版本的commit_id 执行回滚命令【git reset --hard commit_id】:回退到指定commit_id的代码,将现在的代码和对应commit_id版本的代码做一次同步 git pull 拉取分支名字记录下几个回滚命令:【git reset --soft commit_id】撤销指定 commit_.

2022-04-11 11:28:20 2258

原创 超超超详细-实现一个简单的基于 React Fiber 的 React

我们将从头一步一步来开始重写React,遵循真正的React代码的架构,但没有优化和非必要的功能。本次博客基于16.8版本使用hooks:createElement函数 render渲染函数 并发模式 Fibers 渲染和提交阶段 调和Reconciliation 函数组件 Hooks首先,先回顾一下基本概念:我们先定义了一个react元素,接着获取节点,最后渲染到容器中:const element = <h1 title="foo">Hello</h1>

2022-04-07 20:04:52 890 1

原创 超超详细ReactRouter v6版本的基本使用

先附上官网的地址:react-router-v6 · GitHub Topics · GitHub一.概述 React Router 以三个不同的包发布到 npm 上,它们分别为: react-router: 路由的核心库,提供了很多的:组件、钩子。 react-router-dom: 包含react-router所有内容,并添加一些专门用于 DOM 的组件,例如<BrowserRouter>等。 react-router-native: ..

2022-03-27 09:57:20 4197 3

原创 记录一下好用的库

moment.js是javascript日期处理时间类库:http://momentjs.cnlodash是一套工具库,内部封装了很多字符串、数组、对象等常见数据类型的处理函数:https://www.lodashjs.comreact-sortable-hoc是一个可实现水平,垂直拖拽排序的react库:http://clauderic.github.io/react-sortable-hoc/#/basic-configuration/basic-usage?_k=8mrml8...

2022-03-21 16:56:41 99

原创 Switch‘ (imported as ‘Switch‘) was not found in ‘react-router-dom‘

问题:使用<Switch>标签报错原因:最新版本是"react-router-dom": "^6.2.1"已经将Switch改为Routes。解决:(1)将<Switch>标签改为<Routes>标签(2)卸载原先版本,再安装6以下的版本npm uninstall react-router-domnpm install react-router-dom@5...

2022-02-13 23:04:51 698 1

原创 torch.cuda.is_available()返回false最终解决方案

1.把python版本从3.8降到3.62.右击任务管理器--->性能--->可以查看对应的GPU(一个是CPU自带的,另一个是英伟达的)【英伟达支持CUDA,如果仅有CPU自带的选CPU版】3.在终端查看显卡情况,执行 nvidia-smi 命令---如果显示“nvidia-smi不是可执行的命令”,去设置环境变量,记住NVSMI文件夹的路径C:\Program Files\NVIDIA Corporation\NVSMI ,nvidia-smi命令即可执行..

2022-01-14 23:19:00 1149 8

原创 TypeScript---泛型

定义一个函数或类时,在一些情况下能够确定要使用的具体类型。function fn(a:number):number{ return a; }而有些情况下无法确定其中要使用的具体类型(返回值、参数、属性的类型不能确定),此时泛型便能够发挥作用。 示例: function test(arg: any): any{ return arg; } 上例中,test函数有一个参数类型不确定,但是能确定的时其返回值的类型和参数的类型是相同的,由于类型不确定所以参数和返回

2021-12-14 21:11:11 1240 1

原创 TypeScript---接口

接口用来定义一个类结构,定义一个类中应该包含哪些属性和方法,同时接口可以当成类型声明去使用。咱们先看看类型怎么使用:type myType = { name:string, age:number } const obj:myType = { name:'jiangjiang', age:18 }而接口(合并声明):interface myInterface{ name:string,

2021-12-14 20:55:23 214 1

原创 TypeScript---面向对象特点

我理解面向对象的编程思想:根据需求,分析对象,找到对象有什么特征和行为,通过代码的方式来实现需求, 要想实现这个需求,就要创建对象,要想创建对象,先定义类,显示构造函数, 然后通过构造函数来创建对象,通过对象调用属性和方法来实现相应的功能及需求。封装 继承 多态封装 对象实质上就是属性和方法的容器,它的主要作用就是存储属性和方法。 默认情况下,对象的属性是可以任意修改的,为了确保数据的安全性,在TS中可以对属性的权限进行设置。 只读属性(readonly):如果在声.

2021-12-14 20:30:40 950 1

原创 TpyeScript---面向对象-类

面向对象是程序中一个非常重要的思想,可以理解为程序之中所有的操作都需要通过对象来完成。举例来说:操作浏览器要使用window对象 操作网页要使用document对象 操作控制台要使用console对象一切操作都要通过对象,也就是所谓的面向对象,那么对象到底是什么呢?这就要先说到程序是什么,计算机程序的本质就是对现实事物的抽象,抽象的反义词是具体。比如: 照片是对一个具体的人的抽象 汽车模型是对具体汽车的抽象 程序也是对事物的抽象,在程序中我们可以表示一个人、一条狗、一把

2021-12-14 19:54:16 108

原创 TypeScript---Babel的配置

经过一系列的配置,使得TS和webpack已经结合到了一起,除了webpack,开发中还经常需要结合babel来对代码进行转换以使其可以兼容到更多的浏览器,在上述步骤的基础上,通过以下步骤再将babel引入到项目中。步骤:1.安装依赖包npm i -D @babel/core @babel/preset-env babel-loader core-js -@babel/core babel的核心工具 -@babel/preset-env

2021-12-14 17:33:36 814

原创 TypeScript---webpack配置

通常情况下,实际开发中我们都需要使用构建工具对代码进行打包,TS同样也可以结合构建工具一起使用,下边以webpack为例介绍一下如何结合构建工具使用TS。步骤:1.初始化项目- 进入项目根目录,执行命令 npm init -y- 主要作用:创建package.json文件2.下载构建工具npm i -D webpack webpack-cli webpack-dev-server typescript ts-loader clean-webpack-plu

2021-12-14 17:26:29 490 1

原创 TypeScript---编译选项

自动编译文件编译文件时,使用-w指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。tsc xxx.ts -w自动编译整个项目如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。 但是能直接使用tsc命令的前提时,要现在项目根目录下创建一个ts的配置文件tsconfig.json。 tsconfig.json是一个JSON文件,添加配置文件后,只需要tsc命令即可完成对整个项目的编译。 配置选项:includeO--->

2021-12-14 16:33:02 626

原创 TypeScript---基本类型

TypeScript:以JavaScript为基础构建的语言 一个JavaScript的超集 可以在任何支持JavaScript的平台中执行 TypeScript扩展了JavaScript,并添加了类型 TS不能被JS解析器直接执行,TS编译为任意版本的JS【TS完全兼容JS】TypeScript增加了什么?类型(ts给变量添加类型,js的类型是值) 支持ES的新特性 添加了ES不具备的新特性(接口,抽象类) 丰富的配置选项 强大的开发工具TypeScript开发环境的搭建

2021-12-14 11:05:35 735 2

原创 vue源码-虚拟DOM与diff算法分析-虚拟DOM(二)

什么是虚拟DOM?用javaScript对象描述DOM的层次结构,DOM中的一切属性都在虚拟DOM中有对应的属性。真实DOM:<div class="box"> <h3>我是一个标题</h3> <ul> <li>西瓜</li> <li>葡萄</li> <li>香蕉</li> </

2021-09-06 14:30:26 419 3

原创 vue源码-虚拟DOM与diff算法分析-Snabbdom简介和测试环境搭建(一)

提到虚拟dom的话,就不得不提到snabbdom这个库,它是虚拟dom的鼻祖。Snabbdom 是一个专注于简单性、模块化、强大性和高性能的虚拟 DOM 库。核心特性:核心代码 200 行,并且提供丰富的测试用例; 拥有强大模块系统,并且支持模块拓展和灵活组合; 在每个 VNode 和全局模块上,都有丰富的钩子,可以在 Diff 和 Patch 阶段使用。搭建环境:1.npm i snabbdom2.npm i -D webpack@5 webpack-cli@3 webp.

2021-09-04 22:57:15 427 2

空空如也

空空如也

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

TA关注的人

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