承接上次学习的react,今天继续学习react

划重点!!!

今天学习的全是react的核心概念:①props②ref③state

一.核心概念---props

作用:主要用来实现父子组件通信

1. 使用props来实现父子组件通信(父传子)-----跟vue的props用法差不多

步骤1:父组件发送
<Son sonName='zhangsan'></Son>
步骤2:子组件接收
this.props.sonName

来个栗子练习:

2.2 使用props来实现子父组件通信(子传父)

原理: 通过自定义属性是可以传递一个方法的!

步骤1:在父组件中 定义一个有参数的方法
rcvMsg:function(msg){}
步骤2:父组件调用子组件时,通过自定义属性将方法传递给子组件
<Son myFunc={this.rcvMsg}></Son>
步骤3:子组件调用父组件传来的方法,并进行传值
this.props.myFunc(123)

举个栗子demo08:

再来一个栗子demo09加深印象:

3. this.props.children

this.props对象的键值对和组件调用时的属性是一一对应的,但是有一个例外:this.props.children

类型:
array:嵌套的子标记有多个
obj:嵌套的子标记有1个
undefined:没有嵌套

为了防止因为类型而导致的错误,react官方提供了一个方法:
React.Children.map(
this.props.children,
function(child){}
)

直接来个栗子demo0:

二.核心概念--ref

ref(reference),可以帮助得到组件类的实例的引用 (父组件主动的到子组件中获取数据)

使用步骤:
①给我们要查找的元素或者组件 指定一个ref属性
<any ref='myTest'></any>
②通过refs去获取ref对应的元素或者组件
this.refs.myTest.**

这个很简单,就上个栗子demo11:

三.核心概念--state

1.state是负责完成数据在组件内部的定义、读写操作
2.基本功能:
①数据绑定:
将状态中的数据 绑定到视图:数据变化,视图就会更新 MVP模式

这里简要讲解一下MVP模式

MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

看下图:

P在这里相当于一个中间者的校色,view里面需要M里的东西,就告诉P,p再告诉M,P做出相应的变化,M可以保持不变;model里面需要M里的东西,就告诉P,p再告诉View,P做出相应的变化,View可以保持不变.

 至于什么是MVC模式,什么是MVVM(典型的vue中的双向绑定的原理),这里就不讨论了,有兴趣的可以自己去查阅资料。

<p>{this.state.count}</p>
②完成数据的基本管理,包括初始化、读、写
3.用法

初始化:
getInitialState:function(){
return {count:0,age:10}
}
读:
this.state.count
this.state.age
写:
this.setState({count:1})
this.setState({count:1,age:1})
this.setState({count:2},()=>{
//状态写操作成功之后的回调函数
})

今天的重点已经讲完了,现在来个综合练习:

如下图:

在输入框中输入值,控制台实时打印输入框中的结果,当输入完毕后点击按钮,打印输入的真实值

最后的代码:

 <!-- !+tab -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="js/react.js"></script>
<script src="js/react-dom.js"></script>
<script src="js/browser.min.js"></script>
</head>
<body>
<div id='example'></div>
<script type="text/babel">
var AComponent = React.createClass({
handleChange:function(){
//获取输入框的值
var myValue = this.refs.myInput.value
console.log("输入框当前的数据是",myValue)
//将值发送父组件MainComponent
this.props.myFunc(myValue)
},
render:function(){
return <input ref="myInput" onChange={this.handleChange} type='text' placeholder="plz input sth"/>
}
}) var BComponent = React.createClass({
handleClick:function(){
//读取通过自定义属性myValue所传来的数据
console.log(this.props.myValue)
},
render:function(){
return <button onClick={this.handleClick}>
clickMe
</button>
}
})
// 将myContent的所有操作按照state来重构
//(:- 15:15)
var MainComponent = React.createClass({
//myContent:"",
getInitialState:function(){
return {myContent:""}
},
rcv:function(msg){
console.log("父组件接收到子组件传来的数据是",msg);
//this.myContent = msg;//保存数据
this.setState({myContent:msg});
},
render:function(){
return <div>
<AComponent myFunc={this.rcv}></AComponent>
<BComponent myValue={this.state.myContent}></BComponent>
</div>
}
}) ReactDOM.render(
<MainComponent></MainComponent>,
document.getElementById('example')
)
</script> </body>
</html>

总结:

props两种用法:
1.父给子传值
步骤:①父传递值:<Son recsth="值1"></Son>
②子接受值:this.props.recsth
2.子给父传值:通过传递一个带参数的方法,该方法的参数便是子组件传递给父组件的值
步骤:①父组件中定义一个有参数的方法: rcvMsg:function(msg){}
②父组件调用子组件的时候传递该带参数的方法:<Son myFun={this.rcvMsg}></Son>
③子组件调用父组件传来的方法,并传值:this.props.myFun(123)
自己的见解:子组件给父组件传值相当于两者之间需要一个沟通的桥梁,这个桥梁就是父组件中定义的带参数的方法,
父组件提供一个大碗(带参数的方法)给子组件,通过这个桥梁(大碗)告诉子组件我需要你的某个东西(就是待传递的参数值)
然后子组件收到信号后将这个东西(子组件传递给父组件的值)放到大碗中,最后大碗回到父组件手里(子组件调用该方法),
父组件就收到子组件传递过来的东西(目标参数)了
ref的用法:非常简单
①给我们要查找的元素或者组件指定一个ref属性
<any ref='myTest'></any>
②通过refs去获取ref对应的元素或者组件
this.refs.myTest.**
state的用法:用于完成数据在组件内部的读写操作
分三步
初始化定义: getInitialState:function(){ return {count:"",age:12}}
读取数据(渲染数据):<p>{this.state.count}</p><span>{this.state.age}</span>
修改数据(写数据):this.setState({count:222})

React入门(2)的更多相关文章

  1. react入门(3)

    在第一篇文章里我们介绍了jsx.组件.css写法  点击查看react入门(1) 第二篇文章里我们介绍了事件.this.props.children.props....other.map循环  点击查 ...

  2. react入门(1)

    这篇文章也不能算教程咯,就算是自己学习整理的笔记把. 关于react一些相关的简介.优势之类的,随便百度一下一大堆,我就不多说了,可以去官网(http://reactjs.cn/)看一下. 这片主要讲 ...

  3. react入门(2)

    接着上一次的讲,如果没有看过上一篇文章的小伙伴可以先看一下http://www.cnblogs.com/sakurayeah/p/5807821.html React事件 可以先看一下官网讲解的内容h ...

  4. react入门(4)

    首先还是来回顾一下前三篇讲的内容 react入门(1): jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other react入门(3 ...

  5. React 入门实例教程(转载)

    本人转载自: React 入门实例教程

  6. React 入门实例教程

    现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...

  7. React入门 (1)—使用指南(包括ES5和ES6对比)

    前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...

  8. React入门简单实践

    参考文献: 1.React入门示例教程——阮一峰 2.React仅仅只是你的界限 React主要的优点就是增量更新(虚拟DOM)和组件化(状态机). <!DOCTYPE html> < ...

  9. 2015年最热门前端框架React 入门实例教程

    现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...

  10. React入门资源整理

    另外,附上我搜集的一些比较实用的学习资料,建议先看这些撸起来,再看什么乱七八糟的awsome系列. React入门资源整理 React项目新手指南 http://www.w3ctech.com/top ...

随机推荐

  1. 如何用Postman做接口自动化测试

    目录 前言 什么是自动化测试 自动测试测试分类 为什么需要自动化测试 Postman自动化测试演示 1.新建集合 2.新建接口 3.填写自动化测试脚本 4.录入所有接口 5.执行自动化测试 前言 什么 ...

  2. checkbox,radio自定义美化表单

    原理 利用label标签,包裹input的时候,点击label等同于点击input,再用背景图片显示选中和取消选中状态 效果 图片 复选 <!DOCTYPE html> <html& ...

  3. Hibernage错误:Could not open Hibernate Session for transaction

    今天客户发来的错误,是SSH框架做的项目,是用户在登陆时候出现的错误,但刷新之后就没问题. 提示错误:Could not open Hibernate Session for transaction. ...

  4. 并发工具类的使用 CountDownLatch,CyclicBarrier,Semaphore,Exchanger

    1.CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助. A CountDownLatch用给定的计数初始化. await方法阻塞,直到由于countDo ...

  5. 一次生产环境搭建11g RAC的记录

    一.使用惠普3par工具配置共享存储 该部分可由惠普工作人员协助配置,只需将需求告知即可.如果想自己配置,惠普厂商会发送相关的软件工具以及操作手册给用户. 用putty登陆共享存储,使用showpd ...

  6. .net core WebAPI+EF 动态接收前台json,并动态修改数据库

    用API开发的人都知道,常用的后台接收参数就是建个DTO,然后前台把这个DTO传过来.后台再更新,例如如下例子: public async Task<IActionResult> PutM ...

  7. 脚本写一行echo也能写出bug ? glob了解一下

    背景 最近处理一个 bug 很有意思,有客户反馈某个配置文件解析失败了,出错的那行的内容就只有一个字母 a. 最开始以为是谁改动了处理的脚本,但要到了问题代码中的脚本,比较发现跟库上是一样的. 又经过 ...

  8. 数据结构 - ArrayList

    简介 ArrayList是一个动态数组.ArrayList几乎拥有数组所有优点,例如元素有序,索引访问等:并且一般情况下它还不会越界,添加元素时它能动态扩容.平时工作中ArrayList被我们广泛应用 ...

  9. 如何理解SiamRPN++?

    如何理解SiamRPN++? 目标跟踪: 使用视频序列第一帧的图像(包括bounding box的位置),来找出目标出现在后序帧位置的一种方法. 孪生网络结构: 在进入到正式理解SiamRPN++之前 ...

  10. 当AI遇上K8S:使用Rancher安装机器学习必备工具JupyterHub

    Jupyter Notebook是用于科学数据分析的利器,JupyterHub可以在服务器环境下为多个用户托管Jupyter运行环境.本文将详细介绍如何使用Rancher安装JupyterHub来为数 ...