获取原生的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. 如何使用python在保留原excel格式的前提下插入/修改数据

    一.需求分析: 统计的报表中需要每日查询当天数据并追加到原有的excel后面. 因为原始excel格式已经设定好,如果使用xlwt,仅仅指定设定我们要插入的单元格的格式,原始数据的格式会被初始化. 所 ...

  2. python excle读

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/4/24 9:57 # @File : Excel读.py # @Softwa ...

  3. 第五章jQuery

    DOM文档加载的步骤 解析HTML结构. 加载外部脚本和样式表文件. 解析并执行脚本代码. DOM树构建完成. 加载图片等外部文件. 页面加载完毕. 执行时间不同 window.onload必须等到页 ...

  4. JavaException的使用

    (第一个文件 MyException.java) package exception;import java.io.*; //先创建自己的异常类继承与Exception的类 public class ...

  5. 19.3 Table 1-2.S3C2440A 289-Pin FBGA Pin Assignments (Sheet 4 of 9) (Continued)

    应该为GPA22,这个在中文翻译手册里是正确的.

  6. Git-命令行-删除本地和远程分支

    命令行方式 Git Bash: 切换到要操作的项目文件夹 命令行 : $ cd <ProjectPath> 查看项目的分支们(包括本地和远程) 命令行 : $ git branch -a ...

  7. R常用操作

    ##检查数据的维度 dim(iris) ##显示数据集的内部结构 str(iris) ##显示数据集的属性 attributes(iris) ##显示数据集中每个变量的分布情况 summary(iri ...

  8. input框在浏览器上显示一个叉,去掉方法

    /* 清除IE10及以上版本input的叉叉(X)和密码输入框的眼睛图标 */ input::-ms-clear { display: none; } input::-ms-reveal { disp ...

  9. PhpStorm 2018 破解方法

    破解方法如下: 1.修改phpstrom的验证服务器地址. 在C:\Windows\System32\drivers\etc目录下打开hosts文件,并在文件最后加入 0.0.0.0 account. ...

  10. 2018-2019-2 20165312《网络攻防技术》Exp5 MSF基础应用

    2018-2019-2 20165312<网络攻防技术>Exp5 MSF基础应用 目录 一.知识点总结 二.攻击实例 主动攻击的实践 ms08_067 payload/generic/sh ...