React:入门计数器
---恢复内容开始---
把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:入门计数器的更多相关文章
- react入门(3)
在第一篇文章里我们介绍了jsx.组件.css写法 点击查看react入门(1) 第二篇文章里我们介绍了事件.this.props.children.props....other.map循环 点击查 ...
- react入门(1)
这篇文章也不能算教程咯,就算是自己学习整理的笔记把. 关于react一些相关的简介.优势之类的,随便百度一下一大堆,我就不多说了,可以去官网(http://reactjs.cn/)看一下. 这片主要讲 ...
- react入门(2)
接着上一次的讲,如果没有看过上一篇文章的小伙伴可以先看一下http://www.cnblogs.com/sakurayeah/p/5807821.html React事件 可以先看一下官网讲解的内容h ...
- react入门(4)
首先还是来回顾一下前三篇讲的内容 react入门(1): jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other react入门(3 ...
- React 入门实例教程(转载)
本人转载自: React 入门实例教程
- React 入门实例教程
现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...
- React入门 (1)—使用指南(包括ES5和ES6对比)
前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...
- React入门简单实践
参考文献: 1.React入门示例教程——阮一峰 2.React仅仅只是你的界限 React主要的优点就是增量更新(虚拟DOM)和组件化(状态机). <!DOCTYPE html> < ...
- 2015年最热门前端框架React 入门实例教程
现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...
随机推荐
- cocos2dx3.2移植android
LOCAL_PATH := $(call my-dir)LOCAL_MYDIR = $(LOCAL_PATH)/../../Classesinclude $(CLEAR_VARS) $(call im ...
- Redis 高可用集群
Redis 高可用集群 Redis 的集群主从模型是一种高可用的集群架构.本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删除集群节点,其他配置补充说明. 高可用集群搭建 集群(c ...
- 基于Flink秒级计算时CPU监控图表数据中断问题
基于Flink进行秒级计算时,发现监控图表中CPU有数据中断现象,通过一段时间的跟踪定位,该问题目前已得到有效解决,以下是解决思路: 一.问题现象 以SQL02为例,发现本来10秒一 ...
- [flask实践] 解决mysql数据库不支持中文的问题
接上一篇文章,在解决了mysql+flask环境配置问题之后,往数据库存中文字符串会报1366错误,提示不正确的字符.继而发现默认的mysql采用了Latin1字符集,这种编码是不支持中文的. 如果想 ...
- C语言结构体1.1
结构体组成 struct 结构体名: 类型名 成员名: 建立结构体 结构体名 类型名 { 成员: }: 建立一个关于学生信息的结构体(名字,年龄,性别,学号,成绩): 结构体定义 //结构体声明 s ...
- ATL实现ActiveX插件
文章属于原创,转载请联系本人.有参照两个博客(http://blog.csdn.net/jiangtongcn/article/details/13509633 http://blog.csdn.ne ...
- POJ-1273-Drainage Ditches 朴素增广路
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70588 Accepted: 2743 ...
- Linux多线程编程详细解析----条件变量 pthread_cond_t
Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_ ...
- 十招让Ubuntu 16.04用起来更得心应手(转)
ubuntu 16.04是一种长期支持版本(LTS),是Canonical承诺发布五年的更新版.也就是说,你可以让这个版本在电脑上运行五年! 这样一来,一开始就设置好显得特别重要.你应该确保你的软件是 ...
- The requested URL / was not found on this server——Apache配置虚拟域名后无法访问localhost
今天为了做项目,在Apache中配置了项目域名,成功访问.但是忽然发现要访问localhost突然出现The requested URL / was not found on this server. ...