Day04 - React 第四天

news/2025/3/12 12:20:44/

学习react的第四天,持续更新中 关注不迷路!!!


组件三大核心之——Ref

ref多种形式 字符串形式  回调形式  createRef

字符串形式

javascript"> class Perosn extends React.Component {render() {return (<div><input ref="ipnput1" placeholder="点击按钮获取数据" type="text" /><button onClick={this.showData} >点击获取数据</button><input ref="input2" onBlur={this.showData2} placeholder="失去焦点获取数据" type="text" /></div>)}showData = () => {console.log(this.refs.ipnput1.value);}showData2=()=>{console.log(this.refs.input2.value);}}

注意这种形式已经被react官方弃用

回调形式

javascript">// 组件中的标签可以ref标识自己class Perosn extends React.Component {state = {ifTrue: true}render() {return (<div><p>我今天 {this.state.ifTrue ? '吃饭了' : '没吃饭'}</p>{/*内联式函数*/}<input ref={(c) => {this.input1 = c; console.log(c);}} placeholder="点击按钮获取数据" type="text" />{/*绑定函数*/}<input ref={this.getinput2} placeholder="点击按钮获取数据" type="text" /><button onClick={this.showData} >点击获取数据</button><button onClick={this.setDatas}> 改变 </button></div>)}showData = () => {console.log(this.input1.value);}setDatas= ()=>{this.setState({ifTrue:!this.state.ifTrue})}getinput2=(c)=>{this.input2 = c;console.log(c,"value2");}

关于回调ref的说明

如果ref回调函数是以内联函数的形式定义的,在数据更新过程中会执行两次,第一次传入参数null,第二次会传入参数DOM元素,这是因为在每次渲染时会创建一个新的函数实例。

解决方法:定义成绑定函数就可以避免

createReact

javascript">// 组件中的标签可以ref标识自己class Perosn extends React.Component {// React.createRef() 调用后可以返回一个容器,该容器可以存储被ref所标识的单位// 专人专用 只能绑定一个标签myRef = React.createRef()render() {return (<div><input ref={this.myRef} placeholder="点击按钮获取数据" type="text" />{/* <input ref={this.myRef} placeholder="点击按钮获取数据" type="text" /> */}<button onClick={this.showData} >点击获取数据</button></div>)}showData = () => {console.log(this.myRef.current.value);}getinput2=(c)=>{this.input2 = c;console.log(c,"value2");}}

ref总结

React 的ref是用于访问 DOM 元素或 class 组件实例的方式。它允许我们在函数组件或类组件中直接访问 DOM 元素或组件实例,从而可以实现一些操作,比如获取元素的尺寸、焦点控制、动画等。

收集表单数据

React 提供了多种方式来收集表单数据,其中最常用的是使用受控组件和非受控组件。以下是对这两种方式的详细介绍

受控组件

受控组件(Controlled Components): 受控组件是指表单元素的值由 React 组件的 state 控制。当用户输入时,React 组件的 state 会更新,并且表单元素的值也会随之更新。通常,受控组件会在表单元素的 onChange 事件中更新 state,并且通过 state 传递值给表单元素。

javascript">  // 现用现取 就是非受控组件render() {return (<form onSubmit={this.getQuer}>用户名: <input onChange={this.setUser} type="text" name="username" />密码: <input onChange={this.setPassword} type="password" name="password" /><button>提交</button></form>)}getQuer = (event) => {// 调用原生对象上 阻止表单的默认提交event.preventDefault()console.log(this.state);}// 保存数据到状态中setUser = (event) => {this.setState({username: event.target.value})}setPassword = (event) => {this.setState({password: event.target.value})}

就像是vue的双向数据绑定

非受控组件

非受控组件是指表单元素的值由 DOM 自身控制,而不受 React 组件的 state 影响。在非受控组件中,可以通过 ref 获取表单元素的值。

javascript">  // 组件中的标签可以ref标识自己class Perosn extends React.Component {// 现用现取 就是非受控组件render() {return (<form onSubmit={this.getQuer}>用户名: <input ref={c => this.username = c} type="text" name="username" />密码: <input ref={c => this.password = c} type="password" name="password" /><button>提交</button></form>)}getQuer = (event) => {// 调用原生对象上 阻止表单的默认提交event.preventDefault()console.log(this.username.value);console.log(this.password.value);}}


http://www.ppmy.cn/news/1424614.html

相关文章

R语言影像批量镶嵌与裁剪——mosaic

你有中国不同省份的影像&#xff0c;想要拼接镶嵌成完整的中国影像 镶嵌一 library("raster") library("sp") library("rgdal") library("rgeos") library("…

Django中间件路由映射自动加/斜杠问题原因及分析

输入 http://127.0.0.1:8000/main/index/ 输入 http://127.0.0.1:8000/main/index 路由定义情况 urlpatterns [path("index/", views.index) ]可以发现我在输入URL的index路由时&#xff0c;如果没有和Django定义的路由匹配规则一样的话&#xff0c;浏览器自…

【机器学习】数据变换---小波变换特征提取及应用案列介绍

引言 在机器学习领域&#xff0c;数据变换是一种常见且重要的预处理步骤。通过对原始数据进行变换&#xff0c;我们可以提取出更有意义的特征&#xff0c;提高模型的性能。在众多数据变换方法中&#xff0c;小波变换是一种非常有效的方法&#xff0c;尤其适用于处理非平稳信号和…

(十六)call、apply、bind介绍、区别和实现

函数中的this指向&#xff1a; 函数中的this指向是在函数被调用的时候确定的&#xff0c;也就是执行上下文被创建时确定的。在一个执行上下文中&#xff0c;this由调用者提供&#xff0c;由调用函数的方式来决定。 类数组对象arguments&#xff1a; arguments只在函数&#…

Adobe Premiere Pro将加入AI生成式功能,以提高视频编辑的效率;OpenAI宣布在东京设立亚洲首个办事处

&#x1f989; AI新闻 &#x1f680; Adobe Premiere Pro将加入AI生成式功能&#xff0c;以提高视频编辑的效率 摘要&#xff1a;Adobe宣布&#xff0c;将为Premiere Pro引入由生成式AI驱动的新功能&#xff0c;以提高视频编辑的效率。这些功能包括“生成扩展”&#xff0c;能…

ArrayList,Vector,LinkedList内存解析

1.ArrayList (1). 特点 : 实现了List接口&#xff0c;存储有序的&#xff0c;可重复的数据.底层使用Object[]数组存储.线程不安全.(底层方法未用synchronized修饰.) (2). 版本解析 : <i> : JDK7版本 ArrayList<String> list &#xff1d;new ArrayList<&…

OV通配符证书:安全、便捷的网络认证新选择

OV通配符证书&#xff0c;即组织验证型通配符证书&#xff0c;其最大特点在于其通配符功能。这意味着&#xff0c;一个OV通配符证书可以覆盖同一主域名下的多个子域名&#xff0c;大大简化了证书管理和维护的复杂性。无论是大型企业还是个人网站&#xff0c;都可以通过OV通配符…

服务器上部署GPU版的milvus向量数据库

1、安装docker compose 我们可以从 Github 上下载它的二进制包来使用&#xff0c;最新发行的版本地址&#xff1a; https://github.com/docker/compose/releases sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)…