react基础学习 三
获取原生的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基础学习 三的更多相关文章
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- React Native 学习(三)之 FlexBox 布局
React Native 学习(三)之 FlexBox 布局
- Python基础学习三
Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
- react基础学习和react服务端渲染框架next.js踩坑
说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...
- react基础学习
什么是react:React(有时称为React.js 或ReactJS)是一个为数据提供渲染HTML视图的开源JavaScript库; 其特点: 声明式设计:采用声明范式,可以轻松描述应用高效:通过 ...
- Java基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
- salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)
在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresi ...
- JAVA多线程基础学习三:volatile关键字
Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字. volatile,从字面上说是易变的.不稳定的,事实上,也确实如此,这个 ...
随机推荐
- 并发、并行与多线程——C++
C++11标准在标准库中为多线程提供了组件. 并发: 并发指的是两个或多个独立的活动在同一时段内发生.同一时间段内可以交替处理多个操作.一个CPU交替处理多个任务,存在竞争关系,在逻辑上表现为一个时段 ...
- ViewpageWebview
import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bund ...
- Python变量和常量
1.什么是变量 变量:核心在于变和量儿字,变->变化,量->状态如何定义? x=1 变量名 变量赋值符号:= 变量值:1 其中变量名又称为标识符: 1. 可以是字母,数字,下划线的任意组合 ...
- 设置table的每竖的宽度
- About cookie
1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据. 2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间. ...
- 引擎设计跟踪(九.14.3.2) Deferred shading的后续实现和优化
最近完成了deferred shading和spot light的支持, 并作了一部分优化. 之前forward shading也只支持方向光, 现在也支持了点光源和探照光. 对于forward sh ...
- 结对编程core_6
林静雯PB16060913 李鑫PB16061107 对于这种结对的工作,由于有过电子设计实践的基础,大概知道建一个工程需要做的事,有点经验还是有帮助的. 一.问题要求: 1·主要功能是随机产生有效的 ...
- 常用java的正则表达式
package everyDayPratise; import java.util.regex.Pattern; public class RegexExample { public static v ...
- docker 快速部署ES集群 spark集群
1) 拉下来 ES集群 spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...
- Windows10上桌面共享
Windows自带的桌面共享软件 命令行输入: Msra.exe