Skip to content

Commit 0e453cd

Browse files
author
ihoneys
committed
commit message
0 parents  commit 0e453cd

File tree

350 files changed

+63815
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

350 files changed

+63815
-0
lines changed

.git-ftp-include

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!build/

.gitignore

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Dependencies
2+
/node_modules
3+
4+
# Production
5+
/build
6+
/drafts
7+
/tmp
8+
cloudbaserc.json
9+
10+
# Generated files
11+
.docusaurus
12+
.cache-loader
13+
14+
# Misc
15+
.DS_Store
16+
.env.local
17+
.env.development.local
18+
.env.test.local
19+
.env.production.local
20+
.env
21+
22+
docsearch.json
23+
24+
npm-debug.log*
25+
yarn-debug.log*
26+
yarn-error.log*

.hygen.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// hygen 生成器辅助函数库
2+
module.exports = {
3+
helpers: {
4+
// 用于生成 yyyy-MM-dd 文章标题的日期部分
5+
date: () => new Date().toISOString().slice(0, 10)
6+
}
7+
};

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 个人博客
2+
3+
## 使用方法
4+
5+
首先克隆仓库代码:
6+
7+
```bash
8+
$ git clone https://github.com/ihoneys/ihoneys.github.io.git
9+
10+
```
11+
12+
安装依赖:
13+
14+
```bash
15+
$ cd ihoneys.github.io
16+
$ yarn install
17+
# 或使用 npm install,下同
18+
```
19+
20+
启动项目:
21+
22+
```bash
23+
$ yarn start
24+
```
25+
26+
构建项目:
27+
28+
```bash
29+
# 同时构建中文和英文版
30+
$ yarn build
31+
32+
# 只构建中文版
33+
$ yarn build-cn
34+
```

babel.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
3+
};
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
---
2+
slug: '/no'
3+
layout: Post
4+
title: 直观看懂 ?? || 的区别 # 博客标题(必须)
5+
date: 2021-02-09 # 博客日期,会显示在文章头部(可选)
6+
author: Lucas
7+
author_title: 一枚小前端
8+
author_url: https://github.com/ihoneys
9+
author_image_url: /img/ihoneys.png
10+
catalog: true # 是否启用右侧目录:false / true(可选,默认为 false)
11+
tags: [JavaScript]
12+
---
13+
14+
日常开发中,`??``||` 的使用,必不可少,那么我们知道何时用 `??` 何时用 `||` ?。
15+
16+
<!--truncate-->
17+
18+
# 直观看懂 ?? || 的区别
19+
20+
## 写在前面
21+
22+
下面会通过当值为 `undefined``null``“”``false``0` 来测试使用 `??` `||` 运算符的结果。
23+
24+
### (1)当值为`undefined` 时:
25+
26+
```tsx
27+
const a = undefined;
28+
console.log(`a || 'value' --->${a || "value"}`); // 输出 value
29+
console.log(`a ?? 'value' --->${a ?? "value"}`); // 输出 value
30+
```
31+
32+
### (2)当值为`null`时:
33+
34+
```tsx
35+
const a = null;
36+
console.log(`a || 'value' --->${a || "value"}`); // 输出 value
37+
console.log(`a ?? 'value' --->${a ?? "value"}`); // 输出 value
38+
```
39+
40+
### (3)当值为`””` 时:
41+
42+
```tsx
43+
const a = "";
44+
console.log(`a || 'value' --->${a || "value"}`); // 输出 "value"
45+
console.log(`a ?? 'value' --->${a ?? "value"}`); // 输出 ""
46+
```
47+
48+
### (4)当值为布尔值`false` 时:
49+
50+
```tsx
51+
const a = false;
52+
console.log(`a || 'value' --->${a || "value"}`); // 输出 value
53+
console.log(`a ?? 'value' --->${a ?? "value"}`); // 输出 false
54+
```
55+
56+
### (5)当值为`0` 时:
57+
58+
```tsx
59+
const a = 0;
60+
console.log(`a || 'value' --->${a || "value"}`); // 输出 "value"
61+
console.log(`a ?? 66 --->${a ?? "value"}`); // 输出 0
62+
```
63+
64+
## 总结
65+
66+
使用 `??` 符号时只有当使用左侧值为 `undefined``null` 时才会取右右侧的值,而 `||` 当上面的几种情况都存在时都会取右侧设定的默认值。
67+
68+
我相信大家也会有这样的疑问❓,使用 || 时,当左侧的值为 false 的时候都能取到默认值,为什么还要有??这个符号呢,其实这个运算符的一个目的,就是跟链判断运算符`?.`配合使用,为`null``undefined`的值设置默认值。

blog/2021-02-13-调试源码环境.md

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
---
2+
layout: Post
3+
title: 调试React源码环境 # 博客标题(必须)
4+
date: 2021-02-13 # 博客日期,会显示在文章头部(可选)
5+
author: Lucas
6+
author_title: 一枚小前端
7+
author_url: https://github.com/ihoneys
8+
author_image_url: /img/ihoneys.png
9+
catalog: true # 是否启用右侧目录:false / true(可选,默认为 false)
10+
tags: [JavaScript, React]
11+
---
12+
13+
学习React源码的时候,该如何调试是一个头疼的问题,那么如何调试,下面娓娓道来。
14+
15+
<!--truncate-->
16+
17+
# 调试源码环境
18+
19+
---
20+
21+
## 在前面
22+
23+
本文以下内容调试时间与文章发布时间一致,调试版本为 v17.0.2,过程中遇到的问题,会在下面说明。
24+
25+
## 拉去源码
26+
27+
首先需要拉取 React 代码
28+
29+
```
30+
# 拉取/克隆代码
31+
git clone <https://github.com/facebook/react.git>
32+
33+
# 网络环境不好,拉取速度慢,可以选择下面2个方案:
34+
35+
# 1. 使用 cpm 代理
36+
git clone <https://github.com.cnpmjs.org/facebook/react>
37+
38+
# 2. 或者通过码云国内环境下载
39+
git clone <https://gitee.com/mirrors/react.git>
40+
41+
```
42+
43+
拉取成功后,安装依赖
44+
45+
```
46+
# 进入 react 源码文件夹
47+
cd react
48+
49+
# 安装依赖
50+
yarn
51+
52+
```
53+
54+
在安装依赖过程中,可能会遇到安装失败情况,比如我遇到的:
55+
56+
![Untitled](./img//debug-react//debug.png)
57+
58+
解决方案:
59+
60+
修复 node 版本不兼容的命令配置,忽略引擎版本检查。
61+
62+
```
63+
yarn config set ignore-engines true
64+
65+
```
66+
67+
再从新 `yarn`即可。
68+
69+
## 打包源码
70+
71+
需要打包 `react``scheduler``react-dom`三个包,为 dev 环境可以使用的 cjs 包。
72+
73+
```
74+
# 执行打包命令
75+
yarn build react/index,react/jsx,react-dom/index,scheduler --type=NODE
76+
77+
```
78+
79+
执行 `yarn build` 可能会出现下面打包不成功的问题。
80+
81+
![Untitled](./img/debug-react/debug-1.png)
82+
83+
解决办法就是 尝试使用 `npm` 打包就能打包成功。
84+
85+
```
86+
npm run build react/index,react/jsx,react-dom/index,scheduler --type=NODE
87+
88+
```
89+
90+
打包成功效果图:
91+
92+
![Untitled](./img/debug-react/debug-2.png)
93+
94+
然后进入源码目录 `build/node_modules` 会生成最新的打包的代码。我们为 `react``react-dom`创建 `yarn link`
95+
96+
> 通过 yarn link 可以改变项目中依赖包的目录指向
97+
>
98+
99+
```
100+
cd build/node_moudles
101+
# 分别进入 react、react-dom文件下执行 yarn link
102+
cd react
103+
yarn link
104+
cd ..
105+
cd react-dom
106+
yarn link
107+
108+
```
109+
110+
## 创建一个调试项目
111+
112+
```
113+
# 使用 create-react-app 创建一个 react 应用
114+
npx create-react-app react-origin-code
115+
116+
cd react-origin-code
117+
118+
# 在创建好的项目中,将 react、react-dom 2个包 指向我们刚才生成的包
119+
yarn link react react-dom
120+
121+
```
122+
123+
我们可以试试在 `react/build/node_modules/react-dom/cjs/react-dom.development.js`文件中打印看看是否成功:
124+
125+
![Untitled](./img/debug-react/debug-3.png)
126+
127+
然后 `yarn start` 启动项目。
128+
129+
可能启动项目之后页面会报错。
130+
131+
![Untitled](./img/debug-react/debug-4.png)
132+
133+
解决方案:
134+
135+
复制 `react/fixtures/legacy-jsx-runtimes/react-17/cjs/react-jsx-dev-runtime.development.js`文件到我们打包好的 `build`文件夹 `build/node_modules/react/cjs`下面即可,再从新 `yarn start`
136+
137+
最终看看控制台我们在 `react-dom.development.js`文件中添加的 `console.log`
138+
139+
![Untitled](./img/debug-react/debug-5.png)
140+
141+
## 最后
142+
143+
打印成功,妥,可以开始调试了!
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
layout: Post
3+
title: 记录一次正则使用变量 # 博客标题(必须)
4+
date: 2021-03-12 # 博客日期,会显示在文章头部(可选)
5+
author: Lucas
6+
author_title: 一枚小前端
7+
author_url: https://github.com/ihoneys
8+
author_image_url: img/ihoneys.png
9+
catalog: true # 是否启用右侧目录:false / true(可选,默认为 false)
10+
tags: [JavaScript, RegExp]
11+
---
12+
13+
一次动态表单验证,并且验证的规则不是规定的,而已根据某种特定的情况变化,因此需要使用正则变量的规则去完成。
14+
15+
<!--truncate-->
16+
17+
# 记录一次正则使用变量
18+
19+
## 背景
20+
21+
最开始写了单个判断小数点后几位的正则,由于多处地方公用,希望能封装起来通用,但是正则判断小数的值是写死的,所以想写成变量的形式,根据传递的值来判断小数位后几位。
22+
23+
## 操作
24+
25+
正则表达式校验小数点后几位:
26+
27+
```tsx
28+
const validatorPrecision = (value: number) => {
29+
const reg = /^(\d+)(.\d{0,4})?$/
30+
31+
if (!reg.test(value + '') || value <= 0) {
32+
return Promise.reject(
33+
new Error(t('xxxx')),
34+
)
35+
} else {
36+
return Promise.resolve(new Error())
37+
}
38+
}
39+
```
40+
41+
上面代码正则是使用**字面量形式**去创建的,**如果使用正则表达式里面使用变量**那么需要使用函数创建的方式就是 `new Regexp`
42+
43+
```tsx
44+
const precision = 4;
45+
const reg = new RegExp('^(\\d+)(.\\d{0,' + precision + '})?$');
46+
```

0 commit comments

Comments
 (0)