zonglang / code

平时写的代码练习
1 stars 0 forks source link

遇到的问题 #41

Open zonglang opened 5 years ago

zonglang commented 5 years ago

场景一

描述

在一个tab切换的页面里有slider组件,当切换tab的时候,slider的状态却保留了下来

解决方式

  1. 使用不同的key,在tab切换时强制卸载挂载
  2. 在生命周期componentWillReceiveProps中使用props更新状态

原理

  1. 方式一
    在React的diff过程中,会使用selector和key判断同一层级的元素是否是同一组件,
    ==> 如果是同一组件,会进行原地复用;
    ==> 如果不是同一组件,会卸载后挂载新组件;
    所以使用不同的key可以实现强制更新组件的效果;
    但是这样的性能不好
  2. 方式二
    用state记录组件的状态,
    用props记录组件的最终状态(停止滑动),
    在`componentWIllReceiveProps`这个生命周期中,使用props,更新state。
    单纯使用state记录状态,无法初始化组件状态;
    单纯使用props记录状态,滑动过程中,组件刷新,滑动事件失活;
    不在`componentWillReceiveProps`中更新state,tab切换时slider状态不改变(场景一的问题)

思考: Hooks中怎么玩?

    Hooks中的useEffect会在组件render和reRender时重新执行回调函数;
    所以只需要使用一个useEffect更改状态就行了;
zonglang commented 5 years ago

场景二

描述

在改版一个项目的时候,多人协作,但是权限较大,可以直接往master上push代码 在我写完代码后,使用git pull拉取代码,然后push,造成了分支混乱, 在最后一个merge的commit上将所有别人的提交作为变更

解决方式

  1. 什么都不做,反正代码还能用
  2. 使用同事的本地仓库强行替换远程仓库, 然后我本地仓库撤销merge,重新使用git pull --rebase

原理

  1. 方式一

    不用更改的原因是,分支混乱这个东西,只是在merge时,谁做了主分支的区别
  2. 方式二

    同事的本地仓库强行替换远程仓库之后,远程仓库变成了我未提交的状态
    我在本地使用reflog查看git pull之前的分支,然后git reset  --hard切换回去
    重新使用git pull --rebase 拉取代码