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多个不同的值,在更新时会对其进行合并批量更新。

      

  • 相关阅读:
    LeetCode刷题之字符串
    LeetCode刷题之数组复习
    为什么要用移码来表示阶码(指数)呢?
    字节左移跟右移
    一个有趣的问题
    为什么对数组名取地址,得到的为整个数组的地址?
    在win10 64位下搭建汇编环境
    windows切换samba账号进行连接
    samba服务配置记录
    subversion钩子函数使用记录
  • 原文地址:https://www.cnblogs.com/liumcb/p/14037825.html
Copyright © 2011-2022 走看看