<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div class=‘wrapper‘>
</div>
</body>
<script type="text/javascript">
// class LikeButton {
// render () {
// return `
// <button id=‘like-btn‘>
// <span class=‘like-text‘>赞</span>
// <span>??</span>
// </button>
// `
// }
// }
// function fn(){
// alert(1)
// }
// const wrapper = document.querySelector(‘.wrapper‘)
//
// const likebtn = wrapper.querySelector(‘.like-btn‘)
// const likeButton1 = new LikeButton()
// wrapper.innerHTML = likeButton1.render()
//
// const likeButton2 = new LikeButton()
// wrapper.innerHTML += likeButton2.render()
//
// likebtn.onclick=fn
const createDOMFromString = (domString) => {
const div = document.createElement(‘div‘)
div.innerHTML = domString
return div
}
// class LikeButton {
// constructor () {
// this.state = { isLiked: false }
// }
// setState (state) {
// const oldEl = this.el
// this.state = state
// this.el = this.render()
// if (this.onStateChange) this.onStateChange(oldEl, this.el)
//
// }
//
// changeLikeText () {
//// console.log(this)
//// const likeText = this.el.querySelector(‘.like-text‘)
//// this.state.isLiked = !this.state.isLiked
//// likeText.innerHTML = this.state.isLiked ? ‘取消‘ : ‘点赞‘
// this.setState({
// isLiked: !this.state.isLiked
// })
// }
// render () {
// this.el = createDOMFromString(`
// <button class=‘like-button‘>
// <span class=‘like-text‘>${this.state.isLiked ? ‘取消‘ : ‘点赞‘}</span>
// <span>??</span>
// </button>
// `)
// this.el.addEventListener(‘click‘, this.changeLikeText.bind(this), false)
// return this.el
// }
// }
class Component {
constructor (props = {}) {
this.props = props
console.log(this)
}
setState (state) {
const oldEl = this.el
this.state = state
this.el = this._renderDOM()
if (this.onStateChange) this.onStateChange(oldEl, this.el)
console.log(this)
}
_renderDOM () {
this.el = createDOMFromString(this.render())
if (this.onClick) {
this.el.addEventListener(‘click‘, this.onClick.bind(this), false)
}
return this.el
}
}
// class LikeButton extends Component {
// constructor (props) {
// super(props)
// this.state = { isLiked: false }
// }
//
// onClick () {
// this.setState({
// isLiked: !this.state.isLiked
// })
// }
//
// render () {
// return `
// <button class=‘like-btn‘ style=‘background-color: ${this.props.bgColor}‘>
// <span class=‘like-text‘>${this.state.isLiked ? ‘取消‘ : ‘点赞‘}</span>
// <span>??</span>
// </button>
// `
// }
// }
class RedBlueButton extends Component {
constructor (props) {
super(props)
this.state = {
color: ‘red‘
}
}
onClick () {
this.setState({
color: ‘blue‘
})
}
render () {
return `
<div style=‘color: ${this.state.color};‘>${this.state.color}</div>
`
}
}
const wrapper = document.querySelector(‘.wrapper‘)
const mount = (component, wrapper) => {
wrapper.appendChild(component._renderDOM())
component.onStateChange = (oldEl, newEl) => {
wrapper.insertBefore(newEl, oldEl)
wrapper.removeChild(oldEl)
}
}
mount(new RedBlueButton({ bgColor: ‘red‘ }), wrapper)
</script>
</html>