React_混合小知识

ref+事件(event)+this
  • ref
    。 canvas只能使用dom来获取
    。在React中获取Dom需要用ref 来获取真实的dom
ref分类

普通的元素上边

  • ref以string的形式
 -string ref="box" 获取:this.refs.box;
 this.refs是一个对象,this.refs.对象里面的key,获取到的是这个key对于value
  • ref以函数形式
 ref={(dom)=>{
 console.log(dom)
 }}  //render就会调用,函数里面的参数,就是要获取的dom节点
 *** 更改状态的时候,回调函数会触发两次,第一次的dom是null,第二次才是真实的dom
 **** 函数里面的形参就是要获取的真实的dom节点
  • ref 获取dom操作以及判断
    在这里插入图片描述
在组件上边
  • this.refs.名字 :获取的是组件实例
 <Detail ref="detail"/>   let {detai,boxl}=this.refs
  • findDOMNode(组件实例) //获取的是组件的整个dom
 findDOMNode(ComponentorElement) 获取的是组件的整个dom
 findDOMNode(detail) //可以获取到组件的dom节点
  • unmountComponentAtNode:方法里面只能接收根节点 ( 操作的是根节点) //卸载组件
unmountComponentAtNode(document.getElementById("#root")) 里面是根节点

原生事件
  • Dom0级 :onclick 只能添加一次,没有兼容问题

  • DOM2级:addEventListener 可以添加多次,有兼容问题 IE,
    。 第一个参数是事件名称,
    。第二个参数是回调函数,
    。true是捕获,(从外往里)false是冒泡(从里往外))
    。同时有捕获和冒泡,先执行捕获,再执行冒泡
    。捕获和冒泡只影响触发顺序,不影响谁被触发,触发的元素从当前点击的元素往外触发

  • 如果同时有捕获和冒泡,会先执行捕获,在执行冒泡

  • 事件三要素:事件源,事件类型,事件处理函数

  • stopPropagation 阻止冒泡事件,阻止了冒泡就不往下执行了

  • 捕获在componentDidMount中进行操作

  • 看下例:
    在这里插入图片描述
    拖拽
    原理:盒子的距离 = 最后手指到页面距离 - (开始手指到页面距离 - 盒子到页面距离)

react事件(合成事件)
  • react 事件 :必须是驼峰模式

  • onClick :点击事件

  • 合成事件的捕获 onClickCapture

  • react 事件默认是冒泡,所有合成事件都是加在document上,没有兼容,
    。合成事件阻止事件冒泡 e.nativeEvent.stopImmediatePropagation()
    。合成事件销毁 自动销毁

  • 原生事件和合成事件同时出现的时候先执行原生事件,(需要看点击的元素)

  • 需要注意的是:原生事件里面阻止事件冒泡,有可能合成事件不会往下执行(慎用事件冒泡)
    。合成事件默认是冒泡(fasle)
    。事件对象永远在最后一个参数捕获
    。原生事件和合成事件同时出现先执行原生事件

  • 原生事件里阻止事件冒泡,有可能合成事件就都不执行了

  • 原生事件 removeEventListener() 销毁

  • 组件卸载的时候,清空事件,定时器……

  • 属于react事件系统的是 :事件注册 事件存储 事件执行

 onClick={()=>{}}
  • 第二种方法 es7的方法
 onClick={this.handClick}      调用 handClick=()=>{}  
  • 第三种方法添加事件(推荐使用这种)
onClick={this.handClcik.bind(this,参数)}   在render外面调用  handClick(){}
  • 第四种方法 在constructor里面
this.handClick=this.handleclick.bind(this);  在rende外面调用handClick(){}

在这里插入图片描述

  • 判断题 错
    在这里插入图片描述
设置默认样式
  • 如果有传参就用传过来的,没传参就用默认的样式
  • 这是之前的写法
    在这里插入图片描述
  • 这是es6的写法
    在这里插入图片描述
  • 以下是通过父组件传过来的,用this.props来获取,同时注意需要解构以下才能使用
    在这里插入图片描述

this指向
  • this指向:写事件的时候不能再后面调用函数,不能再后面传参数,这样直接就自己执行了(就变成了自执行函数,并且拿不到)
onClick={()=>{}}
handleClick=()=>{}  //可以拿到this,拿不到参数
改变this指向的3种不同的方法

在这里插入图片描述

  • 调用this指向执行可以在constructor中执行,这样可以提高性能,看下例:推荐使用这种调用方法在这里插入图片描述
react表单
 表单:react的表单和html表单不一样
非受控的

非受控组件是在内部存储其自身状态的组件,当需要时,可以使用 ref 查询 DOM 并查找其当前值

  • 如果一个表单组件没有value prop就可以称为非受控组件
  • 不受状态控制,相当于操作DOM
  • defaultValue 默认值和value只能选择一个
  • 可以结合第三方使用,swiper
  • 函数式
    。在虚拟dom节点上使用ref
    。<input ref={dom => this.val = dom}
    。this 点 val 相当于在组件实例上挂载的,全局都能获取到
    。this.val.value
  在虚拟DOM节点使用ref,并使用函数,将函数的参数挂在到实例的属性上
  • 通过构造函数声明式的方式
    。this.sec = React.createRef()
   <input ref={this.sec}/>
   1.实例的构造函数constructor这里创建一个引用
   2.在虚拟DOM节点上声明一个ref属性,并且将创建好的引用赋值给这个ref属性
   3.react会自动将输入框的值放在实例的second属性上
   4.this.sec.current.value
  • 给默认值
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值