• 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),这个是组件间传递数据的关键所在,

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

  • 相关阅读:
    背包问题--动态规划
    day03_13 多分支if语句及作业
    day03_12 缩进介绍
    day03_11 if语句实现猜年龄01
    day03_10 注释及简单的用户输入输出
    day03_09 编码部分历史及文件编码简介
    day03_07 变量的重新赋值01
    day03_06 变量详解
    day03_05 Python程序文件执行和与其他编程语言对比
    day03_04 文件后缀及系统环境变量
  • 原文地址:https://www.cnblogs.com/doudoublog/p/7775441.html
Copyright © 2020-2023  润新知