1.查找dom节点

常用的方法有两种:

第一种常用的方法

1.在constructor中创建ref对象;this.变量 = React.createRef()

2.在标签中使用ref属性绑定创建的ref对象 ref={this.变量对象}

3.在方法中直接获取 this.变量.current

第二种常用的方法

1.标签中ref属性值是一个箭头函数,

2.函数体是将形参el赋值给this.变量(全局变量)

3.在方法种获取自定义的变量

// 类组件
class MyCom extends React.Component {constructor(props) {super()this.state = {count: 0}// 第三种方法this.d3 = React.createRef() // 创建一个ref对象}// getDOM = () => {// 1 原生的查找的方式 不建议使用console.log(document.getElementById("d1"))// 2 给标签添加ref属性 获取的时候通过this.refs.属性值进行获取,类似vue的dom的查找方式,这种方法即将删除的 不建议使用console.log(this.refs.d2)// 3常用 在构造函数使用creteRef创建一个ref属性值,在标签上添加ref属性值为这个定义的对象 建议使用console.log(this.d3.current)// 4常用 对上面方法简写 ref属性值是一个回调函数,函数带了参数el,这个el就是当前元素console.log(this.d4)// 1. 获取函数式子组件 还是通过 ref={el=>this.d5=el}获取的时候,获取不到,是一个undefined的,// 因为函数式组件不能ref赋值。console.log(this.d5)// 2. 如果组件是类组件 可以获取组件对象console.log(this.d6)this.d6.show()}render() {return (<div><button onClick={this.getDOM}> 查找DOM</button><div id="d1">div1</div><div ref="d2">div2</div><div ref={this.d3}>div3</div><div ref={el => this.d4 = el}>div4</div>{/*子组件*/}{/*<Child1 ref={el=>this.d5=el}></Child1>*/}<Child2 ref={el => this.d6 = el}></Child2></div>)}
}function Child1() {return (<div>这是子组件</div>)
}class Child2 extends React.Component {constructor(props) {super()}show() {alert("类组件")}render() {return (<div>子组件2</div>)}
}const root = ReactDOM.createRoot(document.getElementById("app"))
root.render(<MyCom />)

2.受控组件与非受控组件

1 受控组件:在react当中,默认可以完成从state到表单value的动态绑定,就是给form表单标签和数据添加双向绑定;

实现方式:给input标签提供onchange事件,一旦检测到文本框内容有变化,马上执行onchange事件获取表单内容,就是指的是双向绑定;

2 非受控组件: 操作dom获取想要的数据,ref属性接受一个回调函数,返回一个el节点,

实现方式:ref={el=>this.d5=el},this.d5就是元素通过这个this.d5获取标签的value值;没有更改状态,其他使用此状态的值不会更改

2.1 input框的状态

1.input的value必须和onChange一起用;

2.input的defaultValue是只渲染第一次的值;

3.readOnly是设置input为只读属性;

class MyCom extends React.Component{constructor(props){super(props)this.state={count:0}}render(){return(<div>1 value可以结合readOnly属性实现只读标签<input type="text" value={this.state.count} readOnly/><br/>2 通过使用defaultValue 绑定默认值,只在初始化绑定一次,不更新,没有响应式特点<input type="text" defaultValue={this.state.count}/><br/>3 通过value和onchange事件实现双向绑定,这个组件就叫受控组件;具有响应式特点;<input type="text" value={this.state.count} onChange={(e)=>{this.setState({count:e.currentTarget.value})}}/></div>)}
}const root = ReactDOM.createRoot(document.getElementById("app"))
root.render(<MyCom/>)

2.2 受控组件和非受控组件

1.通过dom获取节点然后更改节点的值的话,不会更改状态的值;

2.更改状态的值必须通过this.setState方法;

class MyCom extends React.Component{constructor(props){super(props)this.state={msg:"昨天郑州新增64+294,数据比以往增加太多了"}}render(){let {msg} = this.statereturn(<div><h1>输入框的数据:{msg}</h1>{/*非受控组件*/}<input type="text"  ref={el=>this.d2=el} defaultValue={msg}/>{/*受控组件*/}<input type="text" value={msg} ref={el=>this.d1=el} onChange={(e)=>{this.setState({msg:e.target.value})}}/><button onClick={()=>{this.d1.value  = "今天不知道啥情况郑州"this.d2.value = "111"}}> ref修改</button><button onClick={()=>{console.log("获取数据",this.state.msg)console.log("获取数据",this.d1.value)}}>点击获取</button></div>)}
}const root = ReactDOM.createRoot(document.getElementById("app"))
root.render(<MyCom/>)

总结

1 受控组件

受控组件依赖于状态

受控组件的修改会实时映射在状态值上

受控组件只有继承于React.component才会有状态

受控组件必须在使用onchange事件绑定对应的事件

2 非受控组件

非受控组件不受状态的控制

非受控组件获取数据 相当于操作ODM

适用场景

1 受控组件使用场景 一般需要动态设置其初始值的时候,

2 非受控组件使用场景:一般用于无任何动态初始值的情况

查找DOM,受控与非受控组件相关推荐

  1. 重新认识受控和非受控组件

    该文章包含如下内容 受控与非受控组件非受控组件受控组件 受控和非受控组件边界 反模式 解决方案 前言 在 HTML 中,表单元素(<input>/<textarea>/< ...

  2. 我们应该如何优雅的处理 React 中受控与非受控

    受控 & 非受控 今天来和大家简单聊聊 React 中的受控和非受控的概念. 提到受控和非受控相信对于使用过 React 的朋友已经老生常谈了,在开始正题之前惯例先和大家聊一些关于受控 &am ...

  3. 10 非受控组件以及受控与非受控的选择方案

    含义 非受控组件:表单数据不受控与state的(未绑定value),使用React ref从DOM节点中获取表单数据的组件 提示refs弃用 class MyForm extends React.Co ...

  4. React学习笔记八-受控与非受控组件

    此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享.此为第八篇,主要介绍非受控组件与受控组件. 目录 1.非受控组件 1.1表单提交案例 1.2案例的总结 2.受控组件 2.1受控组件 ...

  5. React 中的受控组件和非受控组件的区别

    React 中受控和非受控的概念通常跟 form 表单组件相关,比如 input ,通过区分与 input 进行数据交互的方式,组件被分成两个不同的派系,受控与非受控. 受控组件 React 中受控组 ...

  6. 【React】知识点归纳:受控组件与非受控组件区别

    React: 受控组件与非受控组件区别 受控组件 示范代码: 原理图: 非受控组件 示范代码: 结论 受控组件 在HTML中,标签<input>.<textarea>.< ...

  7. React中受控组件和非受控组件 1

    一,受控组件 1.概念: 受控组件就是可以被 react 状态控制的组件 在 react 中,Input textarea 等组件默认是非受控组件(输入框内部的值是用户控制,和 React 无关).但 ...

  8. React - 受控组件与非受控组件(实践妙用-模糊查询)

    文章目录 前言 表单中的非受控组件 受控组件 受控组件实践妙用(真实请求Ajax - 模糊查询) 广义上的受控组件 父传子与子传父之间的通信 前言 受控组件有俩种不同的定义: 狭义上我们关注于表单的受 ...

  9. React的受控组件和非受控组件介绍

    文章目录 React受控和非受控组件 认识受控组件 受控组件演练 认识非受控组件(了解) React受控和非受控组件 认识受控组件 在React中,HTML表单的处理方式和普通的DOM元素不太一样:表 ...

最新文章

  1. eclipse使用git合并_Eclipse中使用git
  2. VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别
  3. [Python人工智能] 七.加速神经网络、激励函数和过拟合
  4. C语言源代码展示:常用转换函数实现原理
  5. java经典设计模式4,JAVA设计模式(4) 之装饰设计模式
  6. git add remote_最全的git常用命令(建议收藏)
  7. 2019-1-7Xiaomi Mi5 刷全球版MIUI教程
  8. python爬取新浪博客_python爬虫-韩寒新浪博客博文
  9. python 视频剪辑_视频剪辑什么鬼?Python 带你高效创作短视频
  10. oeasy的html需要会java_Oeasy,会玩才会学
  11. markman高效的设计稿标注、测量工具
  12. 貌似在ubuntu下架了个web服务器,上传上次的flex调色板
  13. (萌新笔记)python的复习笔记
  14. 斗地主小游戏(JAVA实现)
  15. 强大的jqGrid!
  16. 路由器的作用及其结构
  17. 通达信l2接口可登录哪些券商?
  18. SSM毕设项目 - 基于SSM的企业公寓宿舍后勤管理系统(含源码+论文)
  19. matlab 流固耦合,一种基于MATLAB-ANSYS软件的静压溜板流固耦合工作性能的计算方法与流程...
  20. 仙之侠道2玖章各个任务详情_仙之侠道2玖章给Z武器的任务 | 手游网游页游攻略大全...

热门文章

  1. 陈宝存:楼市调控不撞南墙不回头
  2. 今天看continous delivery看到extreme programming
  3. e系列是服务器CPU吗,Intel-至强E系列CPU参数
  4. div+css静态网页设计 web网页设计实例作业 ——中国茶文化(30页) HTML网页制作作品 简单文化网页设计成品 dreamweaver学生网站模板
  5. Hadoop——你不得不了解的大数据工具
  6. 王道408思维导图 marginnote 【4门科齐全】Xmind+脑图原件可下载 - 在线分享
  7. 人像大片这么拍才像样:OPPO R15加入3D人像打光
  8. 11.绘制统计图形——误差棒图
  9. <Linux开发> ubuntu开发工具-Ubuntu测试网速及实时网速图
  10. win用户计算机批量添加用户,win10系统巧用cmd命令快速创建新账户的技巧