React.js初探-如何将一个普通button改造成类React组件

本文介绍了如何使用React.js将一个普通的按钮改造成类React组件,强调了组件的复用性和状态管理。通过实例展示了从简单的按钮到可配置颜色和文字的Button组件的改造过程,探讨了React中组件状态变化如何驱动视图更新,并指出与React真正实现的差异。
摘要由CSDN通过智能技术生成

React.js初探-如何将一个普通button改造成类React组件

React.js目的在于提高前端组件的复用性,而组件状态和表现通常是随着数据而变化,在React中体现为通过父组件传递props或自身定义state来获取数据,通过props与state中数据的变化经过计算来重新渲染组件。下面以一个常见的例子来解释一下组件能为我们带来的便利以及React的超简化版本。

我是一个前端程序员,有一天老板叫我实现一个功能,功能描述如下:一个按钮有两个状态,分别是点击改变颜色和点击还原颜色,原始颜色是红色,点击后颜色为绿色。

通常情况下,我很快接会写出了如下代码:
HTML结构:

<button style="color:red;">换肤</button>

JavaScript代码:

const oButton = document.querySelector('button')
var isChanged = false
oButton.addEventListener('click',function(){
   
    isChanged = !isChanged
    if (isChanged) {
        this.innerHTML = '还原'
        this.style.color = 'green'
    }else{
        this.innerHTML = '换肤'
        this.style.color = 'red'
    }
},false)

是的,我很快就完成了老板交代的任务。
但是过了几天,老板又找到了我,说:“我们现在需要个按钮,功能是这样的:按钮初始状态为绿色,文字为下载。点击之后变为红色,文字为取消“。我想来想去,都觉得和前几天做的那个按钮很像,于是打算将这个Button做成一个组件算了,免得他到时候又提出什么类似的要求。

接下来,我开始按钮改造之旅:
HTML结构:

<div id="root"></div>

JavaScript代码,将按钮抽取为一个Button类:

const createDOMFromString = (str) => {
    var dom = document.createElement('div')
    dom.innerHTML = str
    return dom
}

class Button {
   
    handleClick() {
        console.log('clicked')
    }

    render() {
        const el = createDOMFromString('<button style="color:red;">换肤</button>')
        el.addEventListener('click',this.handleClick.bind(this),false)
        this.el = el
        return el
    }
}

const root = document.querySelector('#root')
root.appendChild(new Button().render())

接下来点击按钮控制台会输出clicked,但是我的目的还没有达到,需求是按钮点击后改变颜色和文字的。那接下来的任务就是通过点击改变按钮的状态,再状态改变之后使按钮的变现也从随之产生变化:

//点击事件只能添加到DOM,此方法用于将字符串包装为真实DOM
const createDOMFromString = (str) => {
    var dom = document.createElement('div')
    dom.innerHTML = str
    return dom
}

class Button 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值