zoukankan      html  css  js  c++  java
  • 面试题:react(三)

    1、什么是合成事件?

    react为了解决跨平台,兼容性问题,自己封装了一套事件机制,代理了原生的事件,像在react中常见的onClick,onChange等这些都是合成事件。
    

    2、什么是非原生事件?

    原生事件是指非react合成事件,原生自带的事件监听 addEventListener ,或者也可以用原生js、jq直接 document.querySelector().onclick 这种绑定事件的形式都属于原生事件。
    

      原生事件的调用栈就比较简单了,因为没有走合成事件的那一大堆,直接触发click事件,到requestWork ,在 requestWork 里由于 expirationTime === Sync 的原因,直接走了 performSyncWork 去更新,并不像合成事件或钩子函数中被return,所以当你在原生事件中setState后,能同步拿到更新后的state值。

    https://zhuanlan.zhihu.com/p/39512941

    3、setState的解析?

    1.setState 只在合成事件和钩子函数中是异步的,在原生事件和setTimeout中都是同步的。
    2.setState的异步并不是说内部由异步代码实现,其实在执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形成了所谓的异步。
    当然可以通过第二个参数setState(partialState,callback)中的callback可以拿到更新后的结果。
    3.setState的批量更新优化也是建立在 异步 (合成事件、钩子函数)之上的,在原生事件和setTimeout中不会批量更新,在异步中如果对同一个值进行多次setState,setState的批量更新测量会对其进行覆盖,
    取最后一次的执行结果。如果同时setState多个不同的值,在更新时会对其进行合并批量更新。

      

  • 相关阅读:
    【LCA】BZOJ1832 & BZOJ1787(AHOI)-集会
    【线段树+离散化】POJ2528-Mayor's posters
    JavaScript Array 整理
    常见的原生javascript DOM操作
    javascript中执行环境和作用域(js高程)
    javascript作用域链
    javascript执行环境及作用域
    [转]深入javascript——原型链和继承
    [转]深入javascript——构造函数和原型对象
    Java接口中的成员变量为什么必须声明为public static final?
  • 原文地址:https://www.cnblogs.com/liumcb/p/14037825.html
Copyright © 2011-2022 走看看