在React中调用render()的确切时间是什么时候?

时间:2016-04-08 08:20:52

标签: javascript reactjs

以下代码的输出是:

#include <stdio.h>
#include <string.h>

void copy_string(char line[], char line1[]) {

    strcpy (line, line1);
}

int main() {
    char line[3] = {0};
    char line1[80] = "hi";
    copy_string(line, line1);
    printf("line is %s \n", line);
    printf("line1 is %s \n", line1);
    return 0;

   return 0; 
}

为什么在handleClick()之后和setTimeout回调函数之前调用render()? render()被调用的确切时间是什么?

buildscript {
repositories {
    jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

1 个答案:

答案 0 :(得分:1)

<强> TL;博士

setTimeout 之前调用 setState 时,在匿名函数之前调用

render ,出于这些目的,Javascript是单线程的。< / p>

以下是您的代码中发生的事情:

  1. 您定义了一个类Hello World。
  2. 您可以在某处调用 ReactDOM.render
  3. React设置 getInitialState 方法的状态。
  4. 您的组件已呈现。
  5. 您点击

    元素。

  6. handleClick 使用React规范化事件触发。
  7. 您设置状态和React标记本身以重新渲染。
  8. setTimeout ,恰好包含 console.log
  9. Javascript是单线程的,因此接下来要解决的是 render
  10. 渲染已完成,因此 setTimeout 中的匿名函数可以触发。
  11. 除此之外,无法保证您在JS控制台中看到的输出顺序绝对是他们发送的顺序。