[工作中遇到的难点] getDeafultProps的深刻理解

2019-03-02  本文已影响0人  向布谷鸟说早安

《深入React技术栈》里有提到过,首次挂载组件的时候,getDefaultProps只会加载一次。之后重新挂载就不会在调用了。
第一次看的时候只是粗粗扫掠了一眼,觉得奇怪却没有在意。后来在调试公司代码的时候遇到了一个问题,在首次挂载组件的时候调用了getDefaultProps,并在里面设置了初始值。但是并没有从外部传递props。

看起来没什么问题,结果应该是对的。

但是公司代码里有许多配置文件,在初次挂载的时候加载的是一份默认的配置文件config1,而在第二次挂载的时候,其实我希望加载的是后来加载的非默认配置文件config2。

但是,第二次挂载的时候,调用的this.props.config的值却是config1的值。

React基础语法 state和props初始化方式这篇博文是这样解释的:
1.getDefaultProps
作用于组件类,只调用一次,返回对象用于设置默认的props,对于引用值,会在实例中共享。
2.getInitialState
作用于组件的实例,在实例创建时调用一次,用于初始化每个实例的state,此时可以访问this.props。
对于学过Java的来说,这样显然更好理解一些。
但是,React源码是这样定义的:

ReactClass = {
    createClass: function() {
       ···
      if(Constructor.getDefaultProps) {
           Contructor.defaultProps = Constructor.getDefaultProps();
      }
      ···
    }
}

React生命周期分为四个方法:createClassmountComponentreceiveComponentunmountComponent,分别管理者React的各个生命周期函数。
getDefaultProps()是createClass来控制的,所以在整个声明周期函数中最先执行,而其它生命周期函数是由其它函数控制的,所以会滞后执行。而该方法只会执行一次。

上一篇下一篇

猜你喜欢

热点阅读