美文网首页
[工作中遇到的难点] getDeafultProps的深刻理解

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

作者: 向布谷鸟说早安 | 来源:发表于2019-03-02 15:26 被阅读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来控制的,所以在整个声明周期函数中最先执行,而其它生命周期函数是由其它函数控制的,所以会滞后执行。而该方法只会执行一次。

    相关文章

      网友评论

          本文标题:[工作中遇到的难点] getDeafultProps的深刻理解

          本文链接:https://www.haomeiwen.com/subject/lmlmtqtx.html