diff --git a/JavaScript.md b/JavaScript.md index e302699..faed4c2 100644 --- a/JavaScript.md +++ b/JavaScript.md @@ -856,7 +856,208 @@ class Student extends Person { -## Node.js: +### JavaScript 操作DOM: + +```js +document.designMode = 'on' //页面所有元素可编辑 + +``` + + + + + +## 防抖和节流: + +#### 防抖(Debounicng) + +防抖是用于延迟执行某个函数,直到某个连续动作停止触发一段时间后才执行。在连续触发事件时,只有当一定的间隔时间过去后,才会触发该函数执行。这对于处理需等待一段时间后才执行的任务非常有用,比如:搜索框输入、窗口大小调整、按钮点击次数过多等。 + +```js +//未封装直接使用防抖技术的 +let timer = null; +function input () { + if(timer !== null) { + clearTimeout(timer) + } + timer = setTimeout(() => { + // 要执行的函数体 + console.log(value) + },500) +} + + +// 封装防抖函数 +function debounce(fn,delay) { + const args = arguments; + let timer; + if(timer) { + clearTimeout(timer) + } + timer = setTimeout(() => { + fn.apply(this,args) + },delay) +} +//用法 +const fun = debounce(searchHandle, 100); + + + +/** + * @desc 防抖函数:一定时间内,只有最后一次执行操作 + * @param {Function} fn 要执行的函数 + * @param {Number} delay 延迟执行毫秒 + */ +const debounce = (fn, delay) => { + let timer; + return function() { + let args = arguments; + if (timer) { + clearTimeout(timer) + } + timer = setTimeout(() => { + fn.apply(this,args) + },delay) + } +} + +``` + + + +#### 节流(Throttling) + +节流是确保函数在一定时间间隔内最多执行一次。它会在指定的时间段内定期执行函数,而不管事件触发的频率有多高。节流适用于需要在连续事件中控制函数执行频率的情况。比如:鼠标移动事件、鼠标滑轮滚动事件等。 + + + +```js + +//节流 +let flag = true; +function scroll() { + if(flag) { + setTimeout( () => { + console.log('hello') + flag = true + },500) + } + flag = false; +} + +//封装节流函数 +function throttle(fn, delay) { + let throttleTimer; + return function() { + const context = this; + const args = arguments; + if (!throttleTimer) { + throttleTimer = setTimeout(() => { + func.apply(context, args); + throttleTimer = null; + }, 500); + } + } +} + + + +/** + * @desc 节流函数:在一定时间内只触发一次 + * @param {Function} fn 执行函数 + * @param {Number} delay 延迟执行毫秒 + */ +let previous = 0; +const throttle = (fn, delay) => { + let now = new Date(); + if (now - previous > delay) { + fn(); + previous = now; + } +} + +``` + + + +### JS 常用键盘值对照表 + +| 键值(Keycode) | 按键 | +| --------------- | ---------------- | +| 8 | 回退键 Backspace | +| 9 | Tab | +| 12 | Clear | +| 13 | Enter | +| 16 | 左 Shift | +| 17 | 左 Ctrl | +| 18 | 左 Alt | +| 19 | Pause | +| 20 | CapsLock | +| 27 | Esc | +| 32 | 空格 Space | +| 35 | End | +| 36 | Home | +| 37 | 左方向键 | +| 38 | 上方向键 | +| 39 | 右方向键 | +| 40 | 下方向键 | +| 46 | Delete | +| 112 | F1 | +| 113 | F2 | +| 114 | F3 | +| 115 | F4 | +| 117 | F6 | +| 118 | F7 | +| 119 | F8 | +| 120 | F9 | +| 121 | F10 | +| 122 | F11 | +| 123 | F12 | +| 65 | A | +| 66 | B | +| 67 | C | +| 68 | D | +| 69 | E | +| 70 | F | +| 71 | G | +| 72 | H | +| 73 | I | +| 74 | J | +| 75 | K | +| 76 | L | +| 77 | M | +| 78 | N | +| 79 | O | +| 80 | P | +| 81 | Q | +| 82 | R | +| 83 | S | +| 84 | T | +| 85 | U | +| 86 | V | +| 87 | W | +| 88 | X | +| 89 | Y | +| 90 | Z | +| | | + +### 实用语法: + +```js +// 浏览器控制视频速度代码: +document.querySelector('video').playbackRate = 3 + +``` + + + + + + + +# Node.js + +**介绍:** 简单的说 Node.js 就是运行在服务端的 JavaScript。 @@ -864,9 +1065,11 @@ Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。 -#### Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/。 +Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/。 -简单示例: + + +**简单示例:** ```js @@ -899,30 +1102,7 @@ Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引 ``` - - - -### Node Koa2框架: 封装原生代码的 API - -```sh - -# Node 安装Koa2 安装完成 不会自带 node_module 需要手动安装一下 -npm i -# 安装koa2 -npm i ‐g koa‐generator # 安装 koa-generator 脚手架 中间件 - -# 查看 版本 -koa2 ‐‐version - -# 创建项目 -koa2 项目名称 # 使用 koa-generator 脚手架 创建项目 - -# 运行项目 -koa2 run dev 项目名称 - -``` - -#### Nodemon 插件: +### Nodemon 插件 介绍:nodemon是一种工具,可以自动检测到目录中的文件,更改时通过重新启动应用程序来调试基于node.js的应用程序。 @@ -938,7 +1118,7 @@ nodemon 文件名或路径名加文件名 # 使用 nodemon 打开 node 服 rs 重启一下 是 restart 的缩写 ``` -### Node JWT Token: +### Node JWT Token **JWT**: @@ -974,7 +1154,7 @@ let token = ctx.request.headers['token']; const token = jwt.verify(token,'token'); ``` -### Node Mysql 连接数据库: +### Node MySQL 连接数据库: Nodejs环境下的MySQL数据库驱动程序。它允许Nodejs应用程序连接到MySQL数据库并执行查询;增删改查。 @@ -1021,7 +1201,7 @@ const query = require("../db.js")//引入 let data = await query(SQL语句) ``` -### Node js WebScoket: +### Node WebScoket: WebSocket 使客户端和服务器端之间的数据交换变得更加简单,允许服务器主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以持久性的连接,并进行双向数据传输。 @@ -1093,7 +1273,7 @@ wss.on("connection",function (ws) { -#### Nodejs Joi: +### Node Joi: JavaScript对象的规则描述语言和验证器。 @@ -1114,7 +1294,7 @@ Joi.validate({ username: 'abc', birthyear: 1994 }, schema); ``` -#### Node pm2: +### Node pm2: 是一个守护进程管理器,不会占用一个终端,而是在后台运行 js。 @@ -1154,6 +1334,53 @@ pm2 delete id ``` +## Koa2 框架 + +**安装使用** + +```sh +# Node 安装Koa2 安装完成 不会自带 node_module 需要手动安装一下 +npm i +# 安装koa2 +npm i ‐g koa‐generator # 安装 koa-generator 脚手架 中间件 + +# 查看 版本 +koa2 ‐‐version + +# 创建项目 +koa2 项目名称 # 使用 koa-generator 脚手架 创建项目 + +# 运行项目 +koa2 run dev 项目名称 + +``` + +#### + +## Nest 框架 + +Nest 是一个用于构建高效,可拓展的 Node.js 服务端应用程序的框架。它使用渐进式JavaScript,内置并完全支持TypeScript(但仍然允许开发人员使用纯JavaScript编写代码)并结合了OOP(面向对象编程)。FP(函数式编程)和FRP(函数时响应编程)的元素。 + + + +**安装使用** + +```sh + +# 使用 CLI 安装 +npm i -g @nestjs/cli + +nest new <项目名称> + +# 使用 Git +# JS版 +git clone https://github.com/nestjs/javascript-starter.git <项目名> + +# TS版 +git clone https://github.com/nestjs/typescript-starter.git <项目名> + +``` + ### Volta @@ -1162,6 +1389,8 @@ Volta 是一种管理 JavaScript 命令行工具的便捷方式。 Volta 的优点就是:速度、无缝,每个项目的版本切换、跨平台支持、支持多个包管理器、稳定的工具安装、可拓展性。 +缺点:安装其他的工具时,老是报一些莫名其妙的错误 Volta error: Could not create shared environment for package + ```sh # 查看各个工具的默认版本 显示当前工具链 @@ -1194,7 +1423,7 @@ volta run **Nvm(Node.js Version Management)** 是 Nodejs 版本管理工具 -```powershell +```sh # 查看已安装的Nodejs nvm list @@ -1203,13 +1432,13 @@ nvm list nvm ls available # 切换版本 -nvm use 版本号 +nvm use <版本号> # 安装版本 -nvm install 版本号 +nvm install <版本号> # 删除版本 -nvm uninstall 版本号 +nvm uninstall <版本号> # 可以在项目根目录里记录 node 版本号, # window 系统下可能不生效 @@ -1222,7 +1451,9 @@ num use -## TypeScript + + +# TypeScript TypeScript 是一个以 JavaScript 为基础的语言,TS 不可以像 JS 样直接被浏览器解析。 @@ -1321,296 +1552,3 @@ window.getComputeStyle(div) -### JavaScript 操作DOM: - -```js - -document.designMode = 'on' //页面所有元素可编辑 - -``` - - - - - -## 防抖和节流: - -#### 防抖(Debounicng) - -防抖是用于延迟执行某个函数,直到某个连续动作停止触发一段时间后才执行。在连续触发事件时,只有当一定的间隔时间过去后,才会触发该函数执行。这对于处理需等待一段时间后才执行的任务非常有用,比如:搜索框输入、窗口大小调整、按钮点击次数过多等。 - -```js - -//未封装直接使用防抖技术的 -let timer = null; -function input () { - if(timer !== null) { - clearTimeout(timer) - } - timer = setTimeout(() => { - // 要执行的函数体 - console.log(value) - },500) -} - - -// 封装防抖函数 -function debounce(fn,delay) { - const args = arguments; - let timer; - if(timer) { - clearTimeout(timer) - } - timer = setTimeout(() => { - fn.apply(this,args) - },delay) -} -//用法 -const fun = debounce(searchHandle, 100); - - - -/** - * @desc 防抖函数:一定时间内,只有最后一次执行操作 - * @param {Function} fn 要执行的函数 - * @param {Number} delay 延迟执行毫秒 - */ -const debounce = (fn, delay) => { - let timer; - return function() { - let args = arguments; - if (timer) { - clearTimeout(timer) - } - timer = setTimeout(() => { - fn.apply(this,args) - },delay) - } -} - -``` - - - -#### 节流(Throttling) - -节流是确保函数在一定时间间隔内最多执行一次。它会在指定的时间段内定期执行函数,而不管事件触发的频率有多高。节流适用于需要在连续事件中控制函数执行频率的情况。比如:鼠标移动事件、鼠标滑轮滚动事件等。 - - - -```js - - -//节流 -let flag = true; -function scroll() { - if(flag) { - setTimeout( () => { - console.log('hello') - flag = true - },500) - } - flag = false; -} - -//封装节流函数 -function throttle(fn, delay) { - let throttleTimer; - return function() { - const context = this; - const args = arguments; - if (!throttleTimer) { - throttleTimer = setTimeout(() => { - func.apply(context, args); - throttleTimer = null; - }, 500); - } - } -} - - - -/** - * @desc 节流函数:在一定时间内只触发一次 - * @param {Function} fn 执行函数 - * @param {Number} delay 延迟执行毫秒 - */ -let previous = 0; -const throttle = (fn, delay) => { - let now = new Date(); - if (now - previous > delay) { - fn(); - previous = now; - } -} - -``` - - - - - -### JS 键盘键值对: - -```scss - -//键值keycode = 对应的键盘按键 - 8 = BackSpace BackSpace - 9 = Tab Tab - 12 = Clear - 13 = Enter - 16 = Shift_L - 17 = Control_L - 18 = Alt_L - 19 = Pause - 20 = Caps_Lock - 27 = Escape Escape - 32 = space space - 33 = Prior - 34 = Next - 35 = End - 36 = Home - 37 = Left - 38 = Up - 39 = Right - 40 = Down - 41 = Select - 42 = Print - 43 = Execute - 45 = Insert - 46 = Delete - 47 = Help - 48 = 0 equal braceright - 49 = 1 exclam onesuperior - 50 = 2 quotedbl twosuperior - 51 = 3 section threesuperior - 52 = 4 dollar - 53 = 5 percent - 54 = 6 ampersand - 55 = 7 slash braceleft - 56 = 8 parenleft bracketleft - 57 = 9 parenright bracketright - 65 = a A - 66 = b B - 67 = c C - 68 = d D - 69 = e E EuroSign - 70 = f F - 71 = g G - 72 = h H - 73 = i I - 74 = j J - 75 = k K - 76 = l L - 77 = m M mu - 78 = n N - 79 = o O - 80 = p P - 81 = q Q at - 82 = r R - 83 = s S - 84 = t T - 85 = u U - 86 = v V - 87 = w W - 88 = x X - 89 = y Y - 90 = z Z - 96 = KP_0 KP_0 - 97 = KP_1 KP_1 - 98 = KP_2 KP_2 - 99 = KP_3 KP_3 - 100 = KP_4 KP_4 - 101 = KP_5 KP_5 - 102 = KP_6 KP_6 - 103 = KP_7 KP_7 - 104 = KP_8 KP_8 - 105 = KP_9 KP_9 - 106 = KP_Multiply KP_Multiply - 107 = KP_Add KP_Add - 108 = KP_Separator KP_Separator - 109 = KP_Subtract KP_Subtract - 110 = KP_Decimal KP_Decimal - 111 = KP_Divide KP_Divide - 112 = F1 - 113 = F2 - 114 = F3 - 115 = F4 - 116 = F5 - 117 = F6 - 118 = F7 - 119 = F8 - 120 = F9 - 121 = F10 - 122 = F11 - 123 = F12 - 124 = F13 - 125 = F14 - 126 = F15 - 127 = F16 - 128 = F17 - 129 = F18 - 130 = F19 - 131 = F20 - 132 = F21 - 133 = F22 - 134 = F23 - 135 = F24 - 136 = Num_Lock - 137 = Scroll_Lock - 187 = acute grave - 188 = comma semicolon - 189 = minus underscore - 190 = period colon - 192 = numbersign apostrophe - 210 = plusminus hyphen macron - 211 = - 212 = copyright registered - 213 = guillemotleft guillemotright - 214 = masculine ordfeminine - 215 = ae AE - 216 = cent yen - 217 = questiondown exclamdown - 218 = onequarter onehalf threequarters - 220 = less greater bar - 221 = plus asterisk asciitilde - 227 = multiply division - 228 = acircumflex Acircumflex - 229 = ecircumflex Ecircumflex - 230 = icircumflex Icircumflex - 231 = ocircumflex Ocircumflex - 232 = ucircumflex Ucircumflex - 233 = ntilde Ntilde - 234 = yacute Yacute - 235 = oslash Ooblique - 236 = aring Aring - 237 = ccedilla Ccedilla - 238 = thorn THORN - 239 = eth ETH - 240 = diaeresis cedilla currency - 241 = agrave Agrave atilde Atilde - 242 = egrave Egrave - 243 = igrave Igrave - 244 = ograve Ograve otilde Otilde - 245 = ugrave Ugrave - 246 = adiaeresis Adiaeresis - 247 = ediaeresis Ediaeresis - 248 = idiaeresis Idiaeresis - 249 = odiaeresis Odiaeresis - 250 = udiaeresis Udiaeresis - 251 = ssharp question backslash - 252 = asciicircum degree - 253 = 3 sterling - 254 = Mode_switch - -``` - -### 实用语法: - -```js - -// 浏览器控制视频速度代码: -document.querySelector('video').playbackRate = 3 - -``` - diff --git a/README.md b/README.md index 37913d7..9483b2c 100644 --- a/README.md +++ b/README.md @@ -7,23 +7,23 @@ #### 目录 -| 文件 | 描述 | -| -------------------------------------------------- | ----------------------------------------------------------- | -| ComputerSkills | 计算机使用技巧,记录一些使用计算机的快捷键之类的内容 | -| Frontend_notes | 学习前端笔记,主要记录HTML和CSS的基础内容和使用技巧 | -| HelloWorld | 综合编程类,存放关于各个编程种使用到的工具,以及一些语法... | -| Java_notes | Java学习笔记 | -| JavaScript | Js学习笔记包括NodeJS | -| jQuery_notes | jQuery学习笔记 | -| Linux_notes | Linux学习笔记,记录一些Linux的命令以及一些使用技巧 | -| MongoDB_notes | MongoDB笔记,记录MongoDB的一些概念以及用法 | -| Photoshop_notes | 记录PS和LR的使用快捷键和一些方法技巧 | -| PHP_notes | PHP学习笔记 | -| Python_notes | Python学习笔记 | -| React_notes | React学习笔记 | -| SQL_notes | SQL语法、主要还是以MySQL为例 | -| Vue_notes | Vue学习笔记 | -| WeChatMP | 微信小程序笔记 | +| 文件 | 描述 | +| -------------------------------------------------- | ------------------------------------------------------------ | +| ComputerSkills | 计算机使用技巧,记录一些使用计算机的快捷键之类的内容 | +| Frontend_notes | 学习前端笔记,主要记录HTML和CSS的基础内容和使用技巧 | +| HelloWorld | 综合编程类,存放关于各个编程种使用到的工具,以及一些语法... | +| Java_notes | Java学习笔记 | +| JavaScript | Js学习笔记包括NodeJS,以及Node.js框架koa2、Nest,还有 Node.js 中间件和插件 | +| jQuery_notes | jQuery学习笔记 | +| Linux_notes | Linux学习笔记,记录一些Linux的命令以及一些使用技巧 | +| MongoDB_notes | MongoDB笔记,记录MongoDB的一些概念以及用法 | +| Photoshop_notes | 记录PS和LR的使用快捷键和一些方法技巧 | +| PHP_notes | PHP学习笔记 | +| Python_notes | Python学习笔记 | +| React_notes | React学习笔记 | +| SQL_notes | SQL语法、主要还是以MySQL为例 | +| Vue_notes | Vue学习笔记 | +| WeChatMP | 微信小程序笔记 | diff --git a/React_notes.md b/React_notes.md index 9284629..67dbd94 100644 --- a/React_notes.md +++ b/React_notes.md @@ -19,13 +19,34 @@ React 起源于 FaceBook 的一个内部项目,用来架设 Instagram 的网 ### React 安装使用 -#### 使用 npm 安装 +#### 使用 Npm 创建 ```sh +# 安装 create-react-app npm install -g create-react-app create-react-app <项目名称> + +# npx 无需安装 create-react-app 创建项目 +npx create-react-app + +``` + +#### 使用 Next.js 框架创建 + +Next.js 的页面路由 **是一个全栈的 React 框架。** 它用途广泛,可让你创建任何规模的 React 应用程序——从大部分静态博客到复杂的动态的应用程序。 + +```sh +npx create-next-app +``` + +#### 使用 Remix 框架创建 + +Remix **是一个具有嵌套路由的全栈式 React 框架。** 它可以把你的应用分成嵌套部分,该嵌套部分可以并行加载数据并响应用户操作进行刷新。 + +```sh +npx create-remix ```