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 ...
随机推荐
- 老男孩Python全栈开发(92天全)视频教程 自学笔记01
day1课程目录: 开课介绍(1) 开课介绍(2) 开课介绍(3) 电脑简史(1) 电脑简史(2) 计算机结构 day1课程内容梳理: 导师介绍: Alex Li(金角大王):买了一辆特斯拉,喜欢姑娘 ...
- React服务器端渲染值Next.js
昨天leader给分配了新任务,让熟悉一下ssr,刚开始有点懵,啥玩意?百度了一下,不就是服务器端渲染(server side render,简称: ssr). ssr简介 服务端渲染一个很常见的场景 ...
- HTML的iframe标签妙用 - 在线执行前端代码的网站原理是什么?
在我自己的日常前端开发中,其实iframe标签出现的次数并不是很多.作为一个很古老(浏览器兼容性非常好)的标签,有必要去了解一下它的典型应用场景. (图片说明:所有浏览器都支持iframe,无论什么版 ...
- 【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序
关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...
- HDU 1698 Just a Hook 线段树+lazy-target 区间刷新
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 微信公众平台创建自定义菜单的PHP代码
授人以鱼不如授人以渔.在方倍工作室上问了一下,创建自定义菜单的代码多少钱,一张口就一百,好吧,那我就给你们一人省一百块钱吧,你们说该如何谢谢我?事先说明一下啊,你的PHP版本要高于4.0.2才支持cU ...
- spring boot + mybatis + hikaricp + swagger2 + jasypt
好久没写博客了记录下写过的东西,别到时候又忘了 文章前提:前面开发项目的时候数据池一直用的阿里的druid,这个数据池吧也不能说它不好,为什么现在想改成hikaricp数据池呢,完全是实用项目需要.d ...
- arguments.callee的临时指向特性
function r(){ alert('BBB'); } var a = { f: function(){ alert('AAA'); arguments.callee = r; } }; 弹出的都 ...
- Ubuntu使用之Svn命令小技巧
注: [svn Path]:是指要代替码分支的server绝对路径 [Path]:是指终端相对当前文件夹的相对路径.假设是在当前文件夹下,就省略路径 ①.取svnserver的代码: svn co [ ...
- Best time to buy and sell stocks IV
题目 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ Say you have an array for which ...