Git常见命令

reflog

git reflog 用于记录本地 git 历史操作记录,包括 commit、reset、checkout 等
通过

git reflog show <branch>
# git reflog <branch>

查看对应分支的历史操作记录,不接 branch 时,默认为当前分支

通过 grep 搭配使用可进行很多有用操作
例如,查看当前分支基于哪个分支创建

git reflog | grep checkout

Git常见命令20221206115805

git reflog 可以查看到被删除的提交记录,对于误合并或回滚时,常可以用以查找需要找回的代码。

pull

git pull -r VS git pull

阅读全文

Flutter基础使用汇总

Flutter 监听返回按键

通过 WillPopScope 组件来注册监听回调

Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _requestPop,
child: Scaffold(
appBar: AppBar(
title: Text('测试代码'),
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
print("退出${Navigator.canPop(context)}");
if (Navigator.canPop(context)) {
Navigator.pop(context);
} else {
SystemNavigator.pop();
}
},
),
),
),
);
}

Future<bool> _requestPop() {
print("POP");
if (Navigator.canPop(context)) {
Navigator.pop(context);
} else {
SystemNavigator.pop();
}
return Future.value(false);
}

Flutter 防止屏幕翻转

在 main.dart 入口中加入如下代码

void main() {
HttpOverrides.global = new MyHttpOverrides();
// runApp(MyApp());
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
runApp(new MyApp());
});
}

BMW WARNING

阅读全文

JS垃圾回收机制

垃圾回收(GC:Garbage Collecation)

在各编程语言中,内存的生命周期大概经历如下三个阶段:

  • 内存分配(allocate)
  • 内存使用(read | write)
  • 内存释放(free)

不管是在高级还是低级语言中,第二阶段的读写都很明确,而内存的分配与释放阶段,
JS 等高级语言会自动分配内存,通过算法自动进行垃圾回收,释放内存。
局部变量会在离开环境时自动解除引用,后续算法自动计数或标记来确定是否释放。
对于全局对象与属性,可通过将值设置成 null 来解除引用以释放内存。
而 C 语言等低级语言在代码中显式分配与释放内存。

JS 的自动回收垃圾机制大致如下:
垃圾收集器会定期(周期性)找出那些不再继续使用的变量,然后释放其内存。
垃圾回收开销较大,垃圾回收时会停止其他操作,所以垃圾回收并不是实时的,而是周期性地进行。
垃圾标记器会跟踪内存,有用内存打上标记,回收垃圾时,需要将那些未被标记的供垃圾回收器清理。
标记的策略一般有两种,引用计数与标记清除。

内存标记策略

引用计数(Reference Counting)

阅读全文

ElementUI相关使用

Form 使用

Form 校验

validate 函数回调不执行

this.$refs[formName].validate((valid) => {
if (valid) {
console.log(' submit!!')
} else {
console.log('error submit!!')
return false
}
})

执行打印后,无相关打印信息。
出现这种问题的原因多为自定义校验规则的函数没有执行 callback 回调。

var validatePassword = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入密码')) // 检查
} else {
if (this.ruleForm.checkPass !== '') {
this.$refs.ruleForm.validateField('checkPass')
}
callback() // 检查
}
}

上述检查无问题,检查是否为 JSX 写法,JSX 写法下 model 传值不能如下

<el-form
class='info-form reset-el-form'
label-position='top'
label-width='80px'
ref='ruleForm'
model={this.params}
v-model={this.params}
rules={this.rules}
>

通过如上方式,无法将 model 值传入
ElementUI相关使用20220314204155
将传值方式更改为 props 传值

<el-form
class='info-form reset-el-form'
label-position='top'
label-width='80px'
ref='ruleForm'
props={{
model: this.params,
rules: this.rules,
}}
>

原因多在于 Vue 对于 JSX 语法支持的问题。
另一个类似而常见的问题在于 ElementUI 占用了 props 传值导致的问题
例如一个 ElTree 的例子。
其 data 为

data() {
return {
departments:[
{
id: 1,
children: [],
deptName: '教育部'
}
]
defaultProps: {
children: 'children',
label: 'deptName',
},
}
},

各属性使用如下方式传值

<el-tree
class='filter-tree'
data={this.departments}
props={this.defaultProps}
ref='tree'
></el-tree>

上述代码并不能将 label 正确地展示出来
应调整为如下写法

<el-tree
class='filter-tree'
data={this.departments}
props={{
props: this.defaultProps,
}}
ref='tree'
></el-tree>

Form 表单数字

阅读全文

ES简单类型

ES 类型

ES 将会类型分为简单类型(原始类型)和复杂类型(结构类型)
其中常见的类型可用 typeof 进行简单判定。

// Primitives:
Boolean : typeof instance === "boolean"
Number : typeof instance === "number"
String : typeof instance === "string"
BigInt : typeof instance === "bigint"
Symbol : typeof instance === "symbol"
undefined : typeof instance === "undefined"

// Structural Types:
Object : typeof instance === "object"
Function : typeof instance === "function"

// Structural Root Primitive:
null : typeof instance === "object"

对于复杂类型中 Array、RegExp 等对象的判定,要得到其明确类型而非’object’
需要使用
Object.prototype.toString.call
例如

Array: Object.prototype.toString.call(instance) //'[object Array]'
RegExp: Object.prototype.toString.call(instance) //'[object RegExp]'

Number

Number进制表示

阅读全文


Copyright © 2017 - 2024 鹧鸪天 All Rights Reserved.

skyline 保留所有权利