当前位置: 首页 > news >正文

ref setState 合成事件

ref & setState & 合成事件

受控组件的概念:数据改变视图的叫受控组件;通过dom操作改变的叫非受控。

语法:给ref=xxx赋一个值,然后通过this.refs.xxx就可以获取到相应dom元素,通过你这个名字存储的值就是这个dom元素。

5个值

props context refs updater state

过ref获取到这个dom元素,然后把创建的dom元素赋给它this.refs.xxx。

ref的3种语法格式:

当给类组件设置ref,ref是子组件实例

当是函数组件,使用React.forwardRef,能够获取子组件内部的dom元素。

setState进阶

回调:

  1. 会在DidUpdate之后执行。若状态/视图更新
  2. 状态未更新,也会执行
  3. 同vue中的$nextTick

底层处理机制

批处理机制,异步更新队列

当前上下文 & 同步代码执行完,setState加入队列中。

会把某一时间的一起批处理。如果都在定时器里面那就涉及到定时器的误差

vue:全局 & 局部

react:函数组件、类组件、hooks组件

16和18的区别

*flushSync

*setState题目 & 第一个参数为函数

第一个参数是函数

合成事件

概念

react基础语法视图层&类组件

es6 class语法:

  1. 用=号的才是私有属性。
  2. 其他的都是挂在原型上
  3. 但是static与实例无关,为静态成员

class中的this:

class语法中箭头函数中的this始终是实例不会因为调用方式而改变

但是class中定义的其他普通函数,若通过实例.调用this是当前类的实例,若单独提取调用,this可能丢失

class A{
    run(){
        // 原型上
        console.log('run',this)
    }
    play=()=>{
        // 私有属性
        console.log('play',this)
        console.log(typeof this)
    }
    render(){
        console.log('render',this)
        window.setInterval(this.run, 1000)
        window.setInterval(this.play,2000)
    }
}
const a = new A
a.render()

合成事件原理:是用事件委托处理的,把函数拿到把函数执行没有执行主体

合成事件对象。统一各浏览器的兼容行为

  • 常用的属性和方法
  • nativeEvent 原生事件对象

render是周期函数,内部执行底层代码实现一定是实例调用,所以其中this是当前类实例。

事件委托

事件是默认的行为,这个行为只要被触发了这个动作只要有了,这个事件行为就已经被触发了。

stopPropagation阻止事件传播,包括捕获。

stopImmediatePropagation 会把同级的排在后面还未执行的,都不再执行了。

事件委托的优势:

底层原理

合成事件都是基于事件委托处理的。

先内置的,再mount钩子里绑定的。

以下代码执行顺序:

关于冒泡

对比16版本原理:

16和18的区别:

  1. 渲染,16 reactdom.render,18 先创建root,然后再root.render;
  2. setState 18都是异步,而16中除了合成事件和周期函数异步,定时器、手动原生事件绑定同步;
  3. 合成事件委托给root,捕获和冒泡阶段做了,16 委托到document上,只做了冒泡阶段,并且是 onXXX和onXXXCapture一起执行。
  4. 合成事件对象的区别,16中事件池。

放回去之前,会把所有信息都清空。再放回去。

细节知识点

click在移动端的300ms延迟

touch事件

循环事件绑定

VUE不一样,给当前元素做的事件绑定。

相关文章:

  • 数据库迁移
  • IREE 调度机制深度解析:静态编译与动态执行的协同优化
  • 【STM32单片机】#2 GPIO输出
  • k8s中service概述(一)ClusterIP
  • 软件测试之Postman接口测试
  • springboot继承使用mybatis-plus举例相关配置,包括分页插件以及封装分页类
  • C++|GLog开源库的使用 如何实现自定义类型消息日志
  • HCIA-AI人工智能笔记3:数据预处理
  • 编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化
  • 二项式分布(Binomial Distribution)
  • YOLO魔改之SAM空间注意力模块
  • 网络基础梳理
  • GAF-CNN-DBO-LSSVM故障诊断/分类预测(Matlab)
  • 【AI速读】30分钟搭建持续集成:用Jenkins拯救你的项目
  • Python 用户账户(让用户拥有自己的数据)
  • “大国品牌”建设全面启动,工业电商生态加速成型
  • 清华大学《DeepSeek从入门到精通》04
  • MacOS安装 nextcloud 的 Virtual File System
  • 使用 Docker 部署 mysql 应用
  • STM32八股【2】-----ARM架构
  • 解放日报:中国大模型企业的发展机遇已经到来
  • 五一小长假,带着小狗去上海音乐厅
  • 烟花、美食和购物优惠都安排上了,上海多区开启热闹模式
  • 路边“僵尸车”被人以1450元卖了,嫌疑人被刑拘
  • 【社论】优化限购限行,激发汽车消费潜能
  • 人社部:对个人加大就业补贴支持,对企业加大扩岗支持