自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Typescript给定一个由key值组成的数组keys,返回由数组项作为key值组成的对象

根据输入数组,返回由数组的项所组成的对象

2022-11-07 16:53:49 763 1

原创 手写实现Vue3 reative

手写实现Vue reactive,详细过程与解析。

2022-10-27 10:37:57 595

原创 Vue3 reactive响应式原理详解

Vue3 reactive响应式原理,附源码解析

2022-10-08 09:38:12 1083

原创 Vue3 Diff算法详解

Vue3中实现的Diff算法,超详细解读,欢迎讨论。

2022-09-26 17:00:05 1050 1

原创 Database设置为utf8mb4,依旧插入不了中文的问题

定义了一个字段类型为VARCHAR,插入中文内容时,发生了以下错误:2. 常见解决方法搜索解决方案时,发现是系统默认设置的字符集有问题。相关解决方法是把字符集修改为utf8mb4。3.常见解决方法不奏效在使用以上方法后,依旧没能解决插入不了中文问题。最后排查了下已创建的表,发现了问题的所在。发现表数据在创建时,会给VARCHAR设置默认字符集“CHARACTER SET latin1 NOT NULL”,即便修改了DATABASE和TABLE的字符集,原先创建的表中varchar类型的字段依旧是原

2022-06-17 18:24:33 685

原创 HTML5唤起摄像头拍摄、裁剪并上传

页面唤起相机拍摄、保存、修改尺寸以及上传近期有个需求,需要在微信中打开移动端页面,让用户在页面中唤起相机进行人脸拍摄,用于身份认证或满足其他业务上的需要。同时要保证上传图像不能过大,需要对图片进行裁剪再上传过程利用input的accept和capture这两个属性来限定接收类型和相机方向(前后摄像)拍摄获取的图片和普通文件上传一样利用FileReader进行读取处理设置到图片目标大小,再用canvas.drawImage读取图片,最后利用canvas.toDataURL转化为base64

2021-11-24 17:26:38 1507

原创 微信小程序onCameraFrame获取的ArrayBuffer转为base64图片的方法

ArrayBufferToBase64前言:由于小程序不在维护wx.arrayBufferToBase64(已弃用),项目中需要用摄像头获取人脸并将获取的ArrayBuffer数据转化为base64,经过各种搜索整合,最后解决问题。ArrayBuffer编码为png下载UPNG https://github.com/photopea/UPNG.js 结尾提供完整代码修改代码,将UPNG导出,并引入依赖pako安装pako(npm i pako --save),小程序安装后需要构建npm(具体

2021-11-17 16:38:42 5092 7

原创 Typescript定义数组,让数组的所有Item只能是指定对象的key值

描述Typescript定义一个数组,该数组的所有Item只能是指定对象的key值。示例const targetObj = { a: "", b: "", c: ""}// okconst arr = ["a", "b"]// errorconst arr = ["a", "d"]解决const arr: (keyof targetObj)[] = ["a", "b"]思考如果要定义一个对象,对象的key值必须从targetArr的Item中取,该如何定义类型?即

2021-05-18 14:50:40 3011

原创 function components cannot be given refs. Attempts to access this ref will fail.

父组件访问子组件方法使用useRef生成childRef,props ref={childRef}访问子组件时报错。报错内容的大意是子组件是函数式组件,不能使用useRef,让你尝试下forwardRef。方案一:尝试forwardRef可能会遇到一直是null的情况function Demo(props, ref) { ... return ( <Child ref={ref}></Child> )}export default forwardRef

2021-05-13 10:33:13 3070

原创 React如何在请求完成后实现页面跳转

React函数组件如何在请求完成后实现页面跳转由于用react开发时直接使用函数式组件,一开始以为需要用Redirect组件来跳转,然后查看文档后发现有withRouter这个高阶函数,能让props中获取location和history对象。利用withRouterimport { withRouter } from "react-router-dom";function Demo(props) { ... api(params).then(res => { props.

2021-05-11 17:26:55 1109

原创 Error: Module “crypto“ has been externalized for browser compatibility and cannot be accessed in ...

背景使用vite构建项目的时候需要用到crypto进行加密出现的错误。问题出在vite本身使用了crypto,我们如果通过npm i crypto -S会导致vite构建时报错。Error: Module "crypto" has been externalized for browser compatibilityand cannot be accessed in client code.解决采用js-md5来进行加密。https://www.npmjs.com/package/js-md5

2021-05-08 17:22:14 11508 2

原创 什么是闭包?一看就会!

定义A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function’s scope from an inner function. In JavaScript, cl

2021-04-17 23:41:06 152

原创 无限长滚动列表(虚拟列表)的实现

无限长滚动列表(虚拟列表)的实现原理:监听容器滚动,根据滚动距离生成对应列表,再利用绝对定位,将列表展示到容器的对应位置。1、预先处理容器样式与生成数据容器列表的最大高度为500px,列表项(li)的高度定为50px,即容器只展示10条数据。<style> ul.container { position: relative; width:500px; max-height: 500px; /* 限定容器展示区域的大小 */

2021-03-04 16:47:19 1968 2

原创 Vue中模板渲染原理

Vue中模板渲染原理1、概念模板:本质字符串。与字符串的区别:有逻辑(vue中有v-if、v-for)嵌入js变量({{变量}})需要转化为html,页面才会识别并正确解析。2、过程理解目的:理解模板(字符串)---->JS的vnode的过程,是如何实现嵌入变量和执行逻辑。转化为html则由updateComponent函数调用patch方法实现。例子1(只有js...

2019-09-14 15:35:35 3093

原创 Vue响应式原理(浅显理解与MVVM的实现)

Vue响应式原理MVVM的设计模式:M是Model数据层,V是View视图层,VM则是ViewModel。Vue中的MVVM实现方式:V层通过DOM Listeners来通知VM层修改数据,M层则通过Data Bindings来通知VM层让V层更新显示内容。具体实现方式:数据绑定(Model–>VM–>View):通过Object.defineProperty(obj,...

2019-09-13 21:50:38 600

原创 virtual DOM(虚拟节点的实现)

virtual DOM(虚拟节点的实现)1 利用JS操作真实DOM节点实现页面渲染任务:在一个容器渲染(利用用户信息生成的)表格,再点击按钮进行数据修改,修改后再重新渲染修改后的信息。方式:利用jQuery操作DOM节点,一开始清空容器的内容,再生成表格,渲染表格。弊端:操作DOM很耗费性能,这种方式是直接替换容器中的所有节点,重复的节点无法复用,降低浏览器性能。HTML代码:&l...

2019-09-13 00:49:57 1008

原创 关于JS函数的问题

关于JS函数的问题主要讨论函数声明式和函数表达式的区别:先看两个例子:例子1:a();//我是声明式函数function a(){ console.log('我是声明式函数')}例子2:a();//a is not a functionvar a = function (){ console.log('我是赋值型函数(即函数表达式)')}问题:为什么执行会结...

2019-09-03 22:50:04 257

原创 JS实现深拷贝

JS实现深拷贝思路:判断传入的类型,创建空数组或对象>>>创建myCopy用于递归调用,分析属性值或项的类型>>>如果值为基本类型值则返回,是对象或数组则递归调用myCopy进一步分析>>>返回拷贝的结果。function deepCopy(obj) { //判断拷贝后的结果是数组还是对象 let copy = Object.p...

2019-08-26 21:43:24 110

原创 JS关于“==”运算符

参考自《JavaScript权威指南》console.log(([])?true:false); console.log(([]==false?true:false)); console.log(({}==false)?true:false)([])?true:false//会调用Boolean([]),等价于true?true: false[] == false?true:false...

2019-08-22 00:35:04 224

原创 JS实现防抖和节流

JS实现防抖节流1、实现防抖目的:避免多次触发,触发时间时,让事件处理程序在一段时间后执行。

2019-08-21 20:13:48 362

原创 JS实现数组的find方法

JS实现数组的常用方法编程思路:先确定方法要传入的参数和返回的值,再通过原型定义,在Array的原型上添加自定的方法,验证是否达到预期效果。1、find的功能array.find(function(currentValue, index, arr), thisValue)功能:返回通过测试(函数内判断)的数组的第一个元素的值。简单理解就是:传入判断条件,判断数组各个元素,返回满足条件...

2019-08-20 16:54:47 8116

原创 JS从“深度优先”和“广度优先”遍历获取数据中某一属性值的集合

JS实现深度优先遍历和广度优先遍历1、要求获取以下数据结构中所有name属性值的集合。数据的结构如下:const myData = [ { name: 'a', children: [ { name: 'b', children: [{ name: 'e' }] }, { name: 'c', children: [{...

2019-08-20 00:28:47 610 2

原创 webpack 笔记(三)

webpack 笔记(三)1 Library(库)打包1.1 解决导出库的引用问题创建了一个library的库,要使别人使用时能采用多用方式引入,配置如下:引用方式:import library from 'library'const library = require('library')require(['library'], function(){})<scrip...

2019-07-29 23:53:18 149

原创 webpack 笔记(二)

笔记(二)1 Tree Shaking只支持ES Module(静态引入),也就是用import export导入导出。作用:一个模块中有多个内容,通过Tree Shaking可以控制只导出使用过(引用)的内容(方法),未使用过的不会打包到main.js文件中。1.1 优化(optimization)配置与使用optimization配置项:开发环境:webpack配置mo...

2019-07-29 23:52:42 174

原创 Webpack(笔记一)

Webpack(笔记一)简介:初识Webpack、Webpack核心概念、进阶、实战配置案例、webpack底层原理及脚手架工具分析1.1 Webpack概念定义:模块打包工具几种引入规范:1、ES Module 模块引入方式:import export(构造函数)2、CommonJS 模块引入规范:require(跟Node一样)module.exports3、CM...

2019-07-29 23:51:53 141

转载 CleanWebpackPlugin is not a constructor

webpack报错今天初始化项目时,报了这个一个错CleanWebpackPlugin is not a constructor,刚开始以为是包下载的问题,重装后发现还是出现这样的问题,翻了官方文档发现用法变了,而中文文档还没有更新过来。之前的用法const path = require(‘path’);const HtmlWebpackPlugin = require(‘html-we...

2019-07-20 14:10:35 102

原创 利用Promise封装AJAX

此API为复习Promise和AJAX时将两者整合,用以获取数据后再异步调用resolve对数据进行处理。其实用jQuery直接$.ajax({success: function(){效果也一样}}),或者axios.get(‘url’).then()也可以实现。 <script> function ajax(method, url, params) { ...

2019-07-03 20:04:00 181

转载 Js获取当前日期时间及其它操作

Js获取当前日期时间及其它操作原文地址:http://www.cnblogs.com/carekee/articles/1678041.htmlvar myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-???)myDate.getMonth...

2019-07-02 15:57:02 69

原创 NodeJS 笔记(四)

NodeJs 笔记(四)1.1 bootcss简洁、直观、强悍的前端开发框架各类精美模版:https://www.bootcss.com/管理系统(模版连接):https://v3.bootcss.com/examples/dashboard/1.2 从JSON文件中读取数据由于读取db.json文件返回的是JSON格式的数据,需要用JSON.parse() 还原解析为data对...

2019-06-13 10:22:07 139

原创 安装mongoose依赖时发生了错误

npm ERR! code ENOSELFnpm ERR! Refusing to install package with name “mongoose” under a packagenpm ERR! also called “mongoose”. Did you name your project the samenpm ERR! as the dependency you’re in...

2019-06-13 10:18:12 907

原创 NodeJs 笔记(三)

NodeJs 笔记(三)Node中的模块系统1.1 模块系统使用Node编写应用程序主要在使用:ECMAScript语言核心模块第三方模块art-template需要通过npm下载才能使用自定义模块1.2 模块化满足两条件:文件作用于通信规则加载require导出1.3 CommomJS模块规范在Node中的JS有模块系统的概念模块作用域...

2019-06-07 16:58:47 258

原创 NodeJs 笔记(二)

NodeJs 笔记二1.1 初步实现Apache功能var http = require('http')1. 创建Servervar server = http.createServer()2. 监听Server的request请求,设置请求处理函数//请求、处理、响应。一个请求对应一个响应var wwwDir = 'D:/Movie/www'//定义一个路径server.on(...

2019-06-07 16:57:55 201

原创 Node.js 笔记(一)

Node.js 笔记一总结(上)1.1 NodeJs介绍与使用Node.js 是什么JavaScript 运行时既不是语言,也不是框架,它是一个平台利用NodeJS打开JS文件在git bush中定位到JS文件所在的文件夹输入“node XX.js”即可执行js文件中的代码helloworld.js:var i = "hello world"console.log...

2019-06-07 16:55:02 181

空空如也

空空如也

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

TA关注的人

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