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,从字面上说是易变的.不稳定的,事实上,也确实如此,这个 ...
随机推荐
- jquery 禁止回车事件响应
$(this).keydown( function(e) { var key = window.event?e.keyCode:e.which; if(key.toString() == " ...
- Linux查询日志内容
1.查询日志中含有某个关键字的信息 cat app.log |grep 'error' 2.查询日志尾部最后10行的日志 tail -n 10 app.log 3.查询10行之后的所有日志 tail ...
- linux使用"userdel 用户名“删除用户的解决办法
在新建用户的时候我们可以忽略掉给用户分组的信息,而直接使用“useradd 用户名” 来直接添加新用户,所以由此想到删除用户能不能直接使用“userdel 用户名”来删除用户呢?回答是否定的,如此会残 ...
- c语言希尔排序,并输出结果(不含插入排序)
#include<stdio.h> void shellsort(int* data,int len) { int d=len; int i; ) { d=(d+)/; //增量序列表达方 ...
- 使用JBolt新建Maven版工程步骤
一.打开新建对话框 在左侧右键new中可以找到JFinal创建工程的菜单 JBoltHome页面也有快捷按钮用来弹出创建工程对话框. 二.填写Maven和其他信息配置 填写工程name 主包名 下面有 ...
- django使用ckeditor上传图片
1.在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开 from ckeditor_uploade ...
- 引擎设计跟踪(九.14.2 final) Inverse Kinematics: CCD 在Blade中的实现
因为工作忙, 好久没有记笔记了, 但是有时候发现还得翻以前的笔记去看, 所以还是尽量记下来备忘. 关于IK, 读了一些paper, 觉得之前翻译的那篇, welman的paper (http://gr ...
- C/C++ 控制台字体的变颜变色
先扔一个链接上来,因为怕忘: https://blog.csdn.net/stude/article/details/7645056 https://blog.csdn.net/lindorx/art ...
- Linux DNS 服务器安装、配置和维护
每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开.有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对直观有意义的主机名就行了.这就是 DNS ...
- 【Dubbo源码学习】负载均衡算法(1)-随机算法
/** * random load balance. * */public class RandomLoadBalance extends AbstractLoadBalance { public s ...