React高级组件实现计步器

定义一个入口Cart.jsx

import React, { Component } from 'react'
//数字组件
import Count from './Count'
//加减按钮组件
import CountBUtton from './CountButton'
//状态管理,包括数字添加,加减函数
import {CountProvider} from './counterContext'

export default class Cart extends Component {
    render() {
        return (
            <CountProvider>
            //根据类型生成+,—
                <CountBUtton type="decrement"></CountBUtton>
                <Count></Count>
                <CountBUtton type="increment"></CountBUtton>
            </CountProvider>
        )
    }
}

状态管理

import React,{createContext} from 'react'
//解构出来重新封装Provider
const {Provider,Consumer:CountConsumer}=createContext()

class CountProvider extends React.Component{
    constructor(){
        super();
        this.state={
            count:1
        }
    }
    //加法函数
    increment=()=>{
        this.setState({
            count:this.state.count+1
        })
    }
    //减法函数
    decrement=()=>{
        this.setState({
            count:this.state.count-1
        })
    }
    render(){
        return (
            <Provider value={{
            //传递的数字
                count:this.state.count,
                //传递出去的方法,在button中解构接受
                increment:this.increment,
                decrement:this.decrement
            }}>
                {
                    this.props.children
                }
            </Provider>
        )
    }
}
export  {
    CountProvider,CountConsumer
}

两个组件

import React from 'react'
//解构的Consumer的方法
import {CountConsumer} from './CounterContext'
const Count=()=>{
    return (
        <CountConsumer>
        {
            ({count})=>{
                return <span>{count}</span>
            }
        }
        
        </CountConsumer>
    )
    
}
export default Count;
//按钮---------------------------
import React from 'react'
import {CountConsumer} from './CounterContext'

const CountButton =(props)=>{
    return (
        <CountConsumer>
        {
            ({increment,decrement})=>{
                let {type}=props;
                let btnText=type==='increment'?'+':'-';
                let handleClick=type==='increment'?increment:decrement
                return <button onClick={handleClick}>{btnText}</button>
            }
        }
        </CountConsumer>
    )
}

export default CountButton;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值