• 【React】react学习笔记08-生命周期


    记录一些基本的资料,生命周期这种东西在项目中会有很深刻的体会的,所以没必要死记硬背~ 

    常见的方法:

      • componentWillMount 在渲染前调用,在客户端也在服务端。

      • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。

      • componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。

      • shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。 
        可以在你确认不需要更新组件时使用。

      • componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。

      • componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

      • componentWillUnmount在组件从 DOM 中移除之前立刻被调用。

    调用顺序:

    根据版本会有细微调整:http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

    1、生命周期时序图:

    2、初始化顺序测试

    代码:

    <!DOCTYPE html><html>
    <head>
        <meta charset="utf-8" />
        <title>React Tutorial</title>
    
    </head>
    <body>
        <!--react基础库-->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react-dom.js"></script>
        <!--bable转换库,ES语法以及Jax语法的转换-->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
    
        <div id="content"></div>
    
        <script type="text/babel">
            //定义组件
            class Component extends React.Component{
                //构造函数,在初始化组件的时候会执行
                  constructor(props){
                      console.log('constructor()')
                      super(props);
                      this.state={
                      }
                  }
    
                  render(){
                      console.log('render()')
                      return(
                          <div>
                              <p>顺序测试</p>
                          </div>
                      );
                  }
                componentWillMount(){
                    console.log('componentWillMount()')
                }
                componentDidMount(){
                    console.log('componentDidMount()')
                }
    
            }
    
            ReactDOM.render(<Component />,document.getElementById("content"));
    
    
        </script>
    
    
    </body>
    </html>

     

    执行结果:

    3、state更新测试:

    过程:略

    结论:更新state会触发render()

    详细信息:

    最权威的offical website:https://react.docschina.org/docs/react-component.html

    特别注意:

     这个错误刚犯过,记录一下:

    避免将 props 的值复制给 state!这是一个常见的错误:

    constructor(props) {
     super(props);
     // 不要这样做
     this.state = { color: props.color };
    }

    如此做毫无必要(你可以直接使用 this.props.color),同时还产生了 bug(更新 prop 中的 color 时,并不会影响 state)。

  • 相关阅读:
    DockerCompose安装与快速体验
    Nginx:Docker部署与负载均衡开发实践
    JAVA基础:反射基础
    JVM:类加载机制
    JAVA基础:注解应用示例
    JAVA基础:注解机制
    JAVA并发(五):关键词final
    JAVA并发(四):关键词volatile
    Linux虚拟机配置作为旁挂路由器
    Linux起不来,如何修复
  • 原文地址:https://www.cnblogs.com/the-fool/p/11163986.html
Copyright © 2020-2023  润新知