演示react封装的代码

<!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.οnclick=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>

 

转载于:https://www.cnblogs.com/yforward/p/7270312.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值