---恢复内容开始---

把React的官网入门例子全看一遍,理解了,但自己从头开始写有点困难,这次强迫自己从头开始写,并写好注释:

import React, { Component } from 'react';

class CountTag extends Component {
constructor(props) {
super(props)
//与render函数的onClick绑定,必须绑定,不然js找不到这两个函数
this.onClickAdd = this.onClickAdd.bind(this)
this.onCLickReduce = this.onCLickReduce.bind(this)
}
onClickAdd()
{ }
onCLickReduce()
{ } render() {
return (
<div>
{/*与html的标签无异,定义两个按钮和点击函数,但还没有实现它,预定一个props.num让父组件传值*/}
<button onClick={this.onClickAdd}>+</button>
<button onClick={this.onCLickReduce}>-</button>
counter:{this.props.num}
</div>
)
}
}
export default CountTag

运行结果:

接下来该实现点击+ -功能了,当我们只做这个页面时,也就是说不需要父组件,可以把thisp.props.num换成state:

import React, { Component } from 'react';

class CountTag extends Component {
constructor(props) {
super(props)
//与render函数的onClick绑定,必须绑定,不然js找不到这两个函数
this.onClickAdd = this.onClickAdd.bind(this)
this.onCLickReduce = this.onCLickReduce.bind(this)
this.state = { initValue: 0
}
}
//+ =>函数
onClickAdd()
{ this.state.initValue++
//设置state
this.setState({initValue:this.state.initValue})
}
//- => 函数
onCLickReduce()
{
this.state.initValue--
//设置state
this.setState({initValue: this.state.initValue})
} render() {
return (
<div>
{/*与html的标签无异,定义两个按钮和点击函数,但还没有实现它,预定一个props.num让父组件传值*/}
<button onClick={this.onClickAdd}>+</button>
<button onClick={this.onCLickReduce}>-</button>
counter: {this.state.initValue}
</div>
)
}
}
export default CountTag

现在按钮功能可以正常使用了:

接下来让我们做一个相对比较复杂的计数器,先看一下运行结果:

三个计数器,下面是一个总和,现在可以新建一个父组件CountParent.js

两个文件的完整代码附上:CountTag.js

import React, { Component } from 'react';

class CountTag extends Component {
constructor(props) {
super(props)
//与render函数的onClick绑定,必须绑定,不然js找不到这两个函数
this.onClickAdd = this.onClickAdd.bind(this)
this.onCLickReduce = this.onCLickReduce.bind(this)
this.state = {
initValue: this.props.num
}
}
//+ =>函数
onClickAdd()
{ this.onUpdateFunc(true)
}
//- => 函数
onCLickReduce()
{
this.onUpdateFunc(false)
} onUpdateFunc(flag)
{
const previousValue = this.state.initValue
//当点击+时flag为真,返回++,反之亦然
const newValue = flag ? ++this.state.initValue : --this.state.initValue
this.setState({initValue: newValue})
//这个函数作为一个props来传递数据,这里是最重要的
this.props.updateCount(previousValue,newValue)
} render() {
return (
<div style={style}>
{/*与html的标签无异,定义两个按钮和点击函数,但还没有实现它,预定一个props.num让父组件传值*/}
<button style={style} onClick={this.onClickAdd}>+</button>
<button style={style} onClick={this.onCLickReduce}>-</button>
{/*countername表示第一个计数器,num表示父组件给的初值,并把这个初始值赋给当前组件的state*/}
{this.props.countername} counter: {this.state.initValue}
</div>
)
}
}
const style = {
margin: '16px'
}
export default CountTag

CountParen.js

其中CountTag.js里面的onUpdateFunc(flag)比较重要,里面有个this.props.uodateCount(previousValue,newValue),这个是组件间传递数据的关键所在,

父组件也用一个函数名不同,但参数相同的来接送子组件传递的数据,从而达到计数器总和的效果。

React:入门计数器的更多相关文章

  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 ...

随机推荐

  1. Android音视频通话过程中最小化成悬浮框的实现(类似Android8.0画中画效果)

    关于音视频通话过程中最小化成悬浮框这个功能的实现,网络上类似的文章很多,但是好像还没看到解释的较为清晰的,这里因为项目需要实现了这样的一个功能,今天我把它记录下来,一方面为了以后用到便于自己查阅,一方 ...

  2. 一位有着工匠精神的博主写的关于IEnumerable接口的详细解析

    在此,推荐一位有着工匠精神的博主写的一篇关于IEnumerable接口的深入解析的文章:http://www.cnblogs.com/zhaopei/p/5769782.html#autoid-0-0 ...

  3. A workaround to change shared memory size for Docker containers in AWS ECS

    Issue Because of not supporting to specify the following docker run parameter, containers in ECS can ...

  4. (译)学习JavaScript闭包

    原文地址:https://medium.freecodecamp.org/lets-learn-javascript-closures-66feb44f6a44   闭包是JavaScript中一个基 ...

  5. 浅谈IM(InstantMessaging) 即时通讯/实时传讯【理论篇】

        一.IM简要概述 IM InstantMessaging(即时通讯,实时传讯)的缩写是IM,互动百科大致解释是一种可以让使用者在网络上建立某种私人聊天(chatroom)的实时通讯服务. 大部 ...

  6. jquery获取iframe页面的元素

    $("#iframe_id").contents().find("#iframe_page_id").val(); 其中,iframe_id是页面引用的ifra ...

  7. saltstack_grains

    1. [root@kylin1 grains]# cd /srv/salt/_grains/ [root@kylin1 _grains]# ls cpu.py [root@kylin1 _grains ...

  8. 移动GIS未来的前景GIS解决方案应用

    目前,在我国一些发达地区,移动GIS所需的两个技术前提——移动互联网的普及和智能终端的普及都已经得到了满足,特别是平板电脑.智能手机的流行,苹果产品的风靡,为移动GIS的应用提供了肥沃的土壤,而GIS ...

  9. TP3.2 图片上传及缩略图

    基于TP自带的上传文件的类, Think/Upload.class.php 设置表单的enctype属性 下面是上传的具体方法 /** * 图片上传处理 * @param [String] $path ...

  10. 黑马day16 jquery&amp;属性过滤选择器

    属性过滤选择器的过滤规则是通过元素的属性来获取对应的元素 .[attribute] 使用方法: $("div[id]") ;  返回值  集合元素 说明:匹配包括给定属性的元素.样 ...