前端杂记(八)

2020 / 04 / 20

git reflog

即使是push -f强行覆盖远程的代码,然后再拉下来,或者git rebase --skip之后也可以通过git reflog获取到所有的提交记录。比如我下边可以看到我进行了三次reset。

1bbf4fb (HEAD -> master) HEAD@{0}: reset: moving to 1bbf4fb
dc72f0c (origin/master) HEAD@{1}: reset: moving to dc72f0c
1bbf4fb (HEAD -> master) HEAD@{2}: reset: moving to 1bbf4fb
c569745 HEAD@{3}: reset: moving to c569745f7c8608e4e8841ef231507f562c562554
1bbf4fb (HEAD -> master) HEAD@{4}: commit: third commit
c569745 HEAD@{5}: commit: second commit
dc72f0c (origin/master) HEAD@{6}: commit: fist commit;
73710cc HEAD@{7}: commit (initial): init

所以其实所有的提交记录都在,git里提交了的代码从来都不会丢掉,可以通过git reflog配合git reset和git cherry-pick来重置回去。

setState和useState

useState可以返回一个可以修改状态的函数和setState类似,在使用他们的时候,如果每次state不发生改变组件是不会重新渲染的。同样如果setState的是一个对象,而对象的值改变,引用不变也不会重新渲染,所以setState也是有一层浅比较的。

const foo = { a: 1 };
class Test extends React.Component {
state = {
foo,
now: Date.now()
};

componentDidMount() {
foo.a = 1;
this.setState({ foo });
}

render() {
console.log('rerender test component');
return null;
}
}
写评论
全部评论