前言
一 生命周期的8个方法
1 componentWillMount()
-
执行场景
-
解释
1 因为componentWillMount是在render之前执行,所以在这个方法中setState 不会发生重新渲染(re-render);
2 这是服务端渲染(server render )中唯一调用的钩子(hook);
3 通常情况下,推荐用constructor() 方法代替;
2 render()
3 componentDidMount()
-
执行场景
-
解释
1 这个方法会在render()之后立即执行;
2 这里可以对DOM进行操作,这个函数之后ref变成实际的DOM(@TODO 表述可能不清晰);
3 这里可以加载服务器数据,并且如果使用了redux之类的数据服务,这里可以出发加载服务器数据的action;
4 这里可以使用setState() 方法触发重新渲染(re-render) ;
4 componentWillReceiveProps(nextProps)
-
执行场景
-
解释
-
注意
1 React可能会在porps传入时即使没有发生改变的时候也发生重新渲染,所以如果你想自己处理改变,请确保比较props当前值和下一次值; 这可能造成组件重新渲染;
2 如果你只是调用this.setState() 而不是从外部传入props ,那么不会触发componentWillReceiveProps(nextProps) 函数;这就意味着: this.setState() 方法不会触发componentWillReceiveProps() ,props 的改变或者props 没有改变才会触发这个方法;
5 shouldComponentUpdate(nextProps,nextState)
-
执行场景
-
解释
-
注意
1 这个方法在首次渲染时或者forceUpdate() 时不会触发;
2 这个方法如果返回false ,那么props 或state 发生改变的时候会阻止子组件发生重新渲染;
3 目前,如果shouldComponentUpdate(nextProps,nextState) 返回false ,那么componentWillUpdate(nextProps,nextState) ,render() ,componentDidUpdate() 都不会被触发;
4 Take care : 在未来,React可能把shouldComponentUpdate() 当做一个小提示(hint)而不是一个指令(strict directive),并且它返回false 仍然可能触发组件重新渲染(re-render);
-
Good Idea
6 componentWillUpdate(nextProps,nextState)
-
执行场景
-
解释
-
注意
1 千万不要在这个函数中调用this.setState() 方法.;
2 如果确实需要响应props 的改变,那么你可以在componentWillReceiveProps(nextProps) 中做响应操作;
3 如果shouldComponentUpdate(nextProps,nextState) 返回false ,那么componentWillUpdate() 不会被触发;
7 componentDidUpdate(prevProps,prevState)
8 componentWillUnmount()
相关 setState(Object/Function)
-
解释
-
参数
1 可以是Object 类型,这时是异步的setState,同时接收一个在state发生改变之后的回调,如this.setState(Object,callback) ,其中callback可以是() => { ... this.state ... } ;
2 可以是Function 类型,这时是同步的setState,例如: (prevState,prevProps) => nextState ,同步存在一定效率问题(不理解),但是它有一个好处就是支持Immutable ;
二 两种生命周期
1 组件初始化
2 组件更新 -- props change
3 组件更新 -- state change
4 组件卸载或销毁
三 相关链接
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|