前端组件化

对于学react前的思考,如何简单的实现前端组件化

实现一个点赞的功能,动态插入页面并绑定事件

采用面向对象的写法,以达到组件复用的效果

看下面代码
html

<div id="wrapper"></div>
复制代码

js

/* 把字符串转换成DOM节点并返回 */
function stringToDom (str) {
    const ele = document.createElement('div');
    ele.innerHTML = str;
    return ele;
}
/* ZanButton */
class ZanButton {
    constructor () {
        this.state = {
            isLike: false
        }
    }
    setState (context) {
        const oldEl = this.el;
        Object.assign(this.state, context);
        // 这边的 el 相当于新建一个DOM节点对象并返回,所以不存在引用关系
        this.el = this.render();
        if (this.onStateChange) {
            this.onStateChange(oldEl, this.el);
        }
    }
    clickController () {
        this.setState({
            isLike: !this.state.isLike
        })
    }
    render () {
        this.el = stringToDom(`
            <button class="btn-text">${ this.state.isLike ? '取消' : '点赞' }</button>
        `);
        this.el.addEventListener('click', this.clickController.bind(this), false)
        return this.el;
    }
}
const wrapper = document.getElementById('wrapper');
const zanBtn1 = new ZanButton();
// 首次插入
wrapper.appendChild(zanBtn1.render())
// 动态插入
zanBtn1.onStateChange = (oldEl, newEl) => {
    wrapper.insertBefore(newEl, oldEl);
    wrapper.removeChild(oldEl);
}
复制代码

这里有一个问题,如果我们想创建多个button component的时候会出现冗余的代码,因为要不断的去给实例化的button新增 onStateChange

这是一个很简单的组件化demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值