5个避免react-hooks坑的技巧
- 阅读官网的FAQ
- 下载和使用 hooks 的 ESLint 插件
- 不要用生命周期的逻辑去思考,用副作用是同步修改state的逻辑去思考
- 明白 react 很快,在做不成熟的性能优化前做些深挖
- 避免过度测试,没必要测得太细节
Stay foolish, stay humble.
Hexo的使用说明,包括一些常用命令。
全局安装hexo-cli:npm install -g hexo-cli
生成项目:hexo init <folder name>
进入文件目录并初始化:cd <folder name> && yarn/npm i
拉仓库代码 git clone git@github.com:buptlyz/blog.git
进入文件目录并初始化 cd blog && yarn
或者 cd blog && npm install
1 | $ hexo new "我的新post" |
更多信息: 写作
1 | $ hexo server |
更多信息: 服务
1 | $ hexo generate |
更多信息: 生成
1 | $ hexo deploy |
更多信息: 部署
Option | Type | Default | Description |
---|---|---|---|
–allowJs | boolean | false | 允许编译Javascript文件 |
–allowSyntheticDefaultImports | boolean | module === ‘system’ 或者 –esModuleInterop | 允许在没有default export的时候从modules中default import。这不影响代码输出,只影响类型检查 |
tsconfig.json
文件通常放在工程根目录下,用来定义编译的配置。
tsc
,compiler
会找tsconfig.json
,从当前文件夹开始,找不到就往父目录找。—project
或者-p
,调用tsc
,指定一个包含tsconfig.json
文件的文件夹路径,或者一个包含配置信息的合法.json文件的路径。如果指定了输入文件,那么tsconfig.json
文件会被忽略。
1 | // 使用 file |
compilerOptions
可以忽略,compiler
会使用默认配置。Compiler Options
files
接收一组相对/绝对路径。include
/exclude
接受一组glob-like file pattern。支持的glob通配符如下:
*
匹配0或多个字符(除了文件夹分隔符)?
匹配任意1个字符(除了文件夹分隔符)**/
递归匹配任意子目录如果某glob pattern只包含*
/.*
,那么默认包含的文件为所有扩展名为.ts
/.tsx
/.d.ts
的文件。(如果allowJs
为true
,那么扩展名为.js
/.jsx
的文件也被包含在内)
如果files
/include
都没有指定值,那么compiler
默认包含文件夹/子文件夹下的所有TypeScript
文件。(扩展名为.ts
/.tsx
/.d.ts
的文件。如果allowJs
为true
,那么扩展名为.js
/.jsx
的文件也被包含在内)
exclude
可以过滤掉include
指定的文件,但不能过滤掉files
指定的文件。如果exclude
没有指定值,默认包含node_modules
/bower_components
/jspm_packages
/<outDir>
。
被包含的文件引用的文件,也被包含在内,不会被exclude
过滤掉,除非引用它的文件被过滤掉了。
compiler
会过滤掉那些可能成为输出文件的输入文件。例如,同一目录下同时有[name].ts
/[name].d.ts
/[name].js
,那么[name].d.ts
/[name].js
会被忽略。
tsconfig.json
可以是一个空文件,compiler
会使用默认配置。
@types
,typeRoots
和types
默认情况下,只有@types
目录下的包会被包含在compilation
里。例如,./node_modules/@types
/../node_modules/@types
/../../node_modules/@types
。
如果指定了typeRoots
的值,那么只有typeRoots
目录下的包会被包含进来。
例如:
1 | { |
只有./typings
目录下的包会被包含进来,./node_modules/@types
目录下的包不会被包含进来。
如果指定了types
的值,那么只有列举出来的包会被包含进来。
1 | { |
只有./node_modules/@types/node
/./node_modules/@types/lodash
/./node_modules/@types/express
会被包含进来,其它./node_modules/@types/*
目录下的包不会被包含进来。
指定types
值为[]
,将会自动过滤所有@types
包。
extends
继承配置文件例如:
configs/base.json
1 | { |
tsconfig.json
1 | { |
tsconfig.nostrictnull.json
1 | { |
告诉IDE,在保存文件的时候使用给定的tsconfig.json
处理所有的文件。
1 | { |
Schema
垂直轴
flex container
flex item
的默认行为:
reduce
方法对数组中的每个元素执行一个由我们定义的reducer
函数(升序执行),将其结果汇总为单个返回值。
reducer
函数接收4个参数:
polyfill
1 | Array.prototype.reduce = function(callback) { |
1 | /** |
1 | var double = x => x*2 |
面向对象的应用程序大多是命令式的,因此在很大程度上依赖于使用基于对象的封装来保护其自身和继承的可变状态的完整性,再通过实例方法来暴露或修改这些状态。
其结果是,对象的数据与其具体的行为以一种内聚的包裹的形式紧耦合在一起。
函数式编程不需要对调用者隐藏数据,通常使用一些更小且非常简单的数据类型。由于一切都是不可变的,对象都是可以直接拿来使用的,而且是通过定义在对象作用域外的函数来实现的。
换句话说,数据与行为是松耦合的。
1 | class Person { |
函数式
1 | function selector(country, school) { |