对于学
react
前的思考,如何简单的实现前端组件化javascript
采用面向对象的写法,以达到组件复用的效果html
看下面代码
html
前端
<div id="wrapper"></div>
复制代码
js
java
/* 把字符串转换成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新增 onStateChangereact
这是一个很简单的组件化demoapp