Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

遇到的问题 #41

Open
zonglang opened this issue Aug 7, 2019 · 1 comment
Open

遇到的问题 #41

zonglang opened this issue Aug 7, 2019 · 1 comment

Comments

@zonglang
Copy link
Owner

zonglang commented Aug 7, 2019

场景一

描述

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

解决方式

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

原理

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

思考: Hooks中怎么玩?

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

zonglang commented Aug 8, 2019

场景二

描述

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

解决方式

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

原理

  1. 方式一
    不用更改的原因是,分支混乱这个东西,只是在merge时,谁做了主分支的区别
  1. 方式二
    同事的本地仓库强行替换远程仓库之后,远程仓库变成了我未提交的状态
    我在本地使用reflog查看git pull之前的分支,然后git reset  --hard切换回去
    重新使用git pull --rebase 拉取代码

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant