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

把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. webpack 3.X学习之CSS处理

    Loaders Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因.通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理. Lo ...

  2. js实现关键词高亮显示 正则匹配

    html 和ajax 部分就不写了,只需将需要匹配的文字传进去就可以了 比如匹配后台传回的字符串data.content中的关键词:直接调用: data.content = highLightKeyw ...

  3. tomcat警告setting property 'debug' to '0' did not find a matching property

    在使用tomcat6.0版本结合myeclipse进行java web项目,运行程序显示setting property 'debug' to '0' did not find a matching ...

  4. poj 3070 && nyoj 148 矩阵快速幂

    poj 3070 && nyoj 148 矩阵快速幂 题目链接 poj: http://poj.org/problem?id=3070 nyoj: http://acm.nyist.n ...

  5. nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37

    一:开始Nginx的SSL模块 1.1 Nginx如果未开启SSL模块,配置Https时提示错误 1 nginx: [emerg] the "ssl" parameter requ ...

  6. PhpStorm2017版激活方法、汉化方法以及界面配置

    PhpStorm激活和汉化文件下载网址:http://pan.baidu.com/s/1nuHF1St(提取密码:62cg) PHPMailer的介绍 PhpStorm是一个轻量级且便捷的PHP ID ...

  7. ThinkPHP的Rbac权限控制

    RBAC(Role-Based Access Controll)基于角色的访问控制 在 ThinkPHP3.2.3 中 RBAC 类位于 /ThinkPHP/Library/Org/Util/Rbac ...

  8. fiddler安装及配置+利用fiddler进行简单抓包(wawayaya阅读)

    1.工欲善其事必先利其器,fiddler安装 https://www.telerik.com/fiddler 2.安装exe(无脑下一步) 3.安装成功后配置fiddler(因为启动fiddler时链 ...

  9. UWP 重启App

    今天看见了阿迪王的博客,写到了重启App自身的代码,微软终于在16299加进来了 其实就加上一句话 await CoreApplication.RequestRestartAsync(string.E ...

  10. 在Github上面搭建一个自己域名的Hexo博客

    前言 在一次看到别人的博客主页,觉得设计很漂亮.但是由于自己对于前台这块没什么办法,煞是羡慕.偶然中发现这种样式是在Github上面搭建的,使用的是Next主题.于是便想自己也搭建一个,于是便去就去查 ...