获取原生的DOM

  注意:获取DOM是要在组件渲染之后才能被获取,所以在constructor里面获取不到原生的DOM

  方法一:回调函数   推荐

  方法二:createRef()   16版本,推荐

  方法三:ref   15版本,不推荐

import React,{Component,createRef} from 'react';

export default class Study extends Component {
constructor(props){
super(props);
this.oSpan = createRef();
this.oH = createRef();
}
render(){
return (
<div>
<p ref={el=>this.oP = el}>我是父级1</p>
<span ref={this.oSpan}>我是父级1</span>
<h1 ref={this.oH}>我是父级1</h1>
<em ref='oEm'>我是父级1</em>
</div>
)
}
componentDidMount(){
console.log('p标签',this.oP);
console.log('span标签',this.oSpan.current);
console.log('h标签',this.oH.current);
console.log('em标签',this.refs.oEm);
}
}

组件的受控

  受控的意思:页面的修改是通过state的修改的,是通过react来修改的。

  栗子:获取input标签里面的value,显示在页面上。

    方法一:不受控的方法,input标签不加value属性就是不受控的。首先获取原生的DOM,将原生的DOM

    方法二:受控的方法,input标签加value属性就是受react控制的

import React,{Component,createRef} from 'react';

export default class Myinput extends Component {
constructor(props){
super(props);
this.state = {
value1:'',
value2:''
}
}
//第一种方法
changeInput1=()=>{
console.log(this.oInput.value)
//获取原生的input节点,获取节点下面的value属性
this.setState({
value1: this.oInput.value
});
}
//第二种方法
changeInput2=(ev)=>{
console.log(ev.target.value)
this.setState({
value2: ev.target.value
}); }
render(){
let {value1,value2} = this.state;
return (
<div>
<input onChange={this.changeInput1} ref={el=>this.oInput = el} type='text'/>
<p >我是父级1dddd{value1}</p>
<p>——————————</p>
<input onChange={this.changeInput2} type='text' value={value2}/>
<p >我是父级1dddd{value2}</p>
</div>
)
}
}

兄弟组件的交流——通过回调函数

  流程:

  栗子:同一个父组件,下面两个子组件,一个组件点击按钮改变msg,里一个子组件显示改变之后的msg

import React,{Component,createRef} from 'react';

export default class Sibling extends Component {
constructor(props){
super(props);
this.state = {
msg: '初始值'
}
}
//点击按钮,修改值
changeMsg=()=>{
this.setState({
msg: this.siblingInput.value
})
this.siblingInput.value = '';
}
render(){
let {msg} = this.state;
//点击send按钮,执行方法changeMsg,将input里面的value赋值给msg
return (
<div>
兄弟组件交流
<p>————————</p>
<Receive msg={msg}/>
<p>————————</p>
<Input getInput={el=>this.siblingInput = el}/>
<Send changeMsg={this.changeMsg}/>
<p>————————</p>
</div>
)
}
}
//接收信息
function Receive(props){
console.log(1,props)
return(
<div>
接收信息:
{props.msg}
</div>
)
}
//发送信息
function Send(props){
return(
<div>
发送信息:
<button onClick={()=>props.changeMsg(Math.random())}>send</button>
</div>
)
} //输入信息
function Input(props){
return(
<input type='text' ref={props.getInput}/>
)
}

react基础学习 三的更多相关文章

  1. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  2. React Native 学习(三)之 FlexBox 布局

    React Native 学习(三)之 FlexBox 布局

  3. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  4. Django基础学习三_路由系统

    今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...

  5. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

  6. react基础学习

    什么是react:React(有时称为React.js 或ReactJS)是一个为数据提供渲染HTML视图的开源JavaScript库; 其特点: 声明式设计:采用声明范式,可以轻松描述应用高效:通过 ...

  7. Java基础学习(三)—面向对象(上)

    一.理解面向对象       面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...

  8. salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

    在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresi ...

  9. JAVA多线程基础学习三:volatile关键字

    Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字. volatile,从字面上说是易变的.不稳定的,事实上,也确实如此,这个 ...

随机推荐

  1. VS Code引用 vue/cli

    npm i @vue/cli -g    引用cli脚手架 3.0版本 下载好后 找个空文件夹  vue create myvue 创建vue项目   myvue是自己项目名称 Your connec ...

  2. Android自定义标签列表控件LabelsView解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果:   标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ...

  3. 终于不再在懵逼mysql原生语句,orm超级登场

    import sqlalchemy from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import cre ...

  4. loj#2720. 「NOI2018」你的名字

    链接大合集: loj uoj luogu bzoj 单纯地纪念一下写的第一份5K代码.../躺尸 因为ZJOI都不会所以只好写NOI的题了... 总之字符串题肯定一上来就拼个大字符串跑后缀数组啦! ( ...

  5. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

  6. 学习笔记DL003:神经网络第二、三次浪潮,数据量、模型规模,精度、复杂度,对现实世界冲击

    神经科学,依靠单一深度学习算法解决不同任务.视觉信号传送到听觉区域,大脑听学习处理区域学会“看”(Von Melchner et al., 2000).计算单元互相作用变智能.新认知机(Fukushi ...

  7. [工作积累] TAA Ghosting 的相关问题

    因为TAA要使用上一帧的历史结果,那么在相机移动的时候,颜色就会有残留,出现ghosting(残影). 由于上一帧历史是累积的,是由上一帧的直接渲染结果和上上帧的结果做了合并,所以ghosting并不 ...

  8. IO文件流

    定义:流是一种抽象的概念,通过流的方式组成无结构字符和字符序列,从流中取数据的操作进行输入输出.[io流的作用就是用流的方式进行输入输出] 常用语法: 1.   首先引用using.system.io ...

  9. 对css语法中position值的理解

    1.static 正常定位,就是默认定位,根据他的top,right,bottom,left的值 2.relative 根据他top,right,bottom,left的值偏移 3.absolute ...

  10. 如何查看电脑已连接的WiFi密码

    控制面板->网络和Internet->网络和共享中心 点击已连接的WLAN网络,查看“WLAN状态”->无线属性->安全 在显示字符下可以看到已连接wifi的密码