美文网首页
探一下底层

探一下底层

作者: clumsy钧 | 来源:发表于2019-01-05 15:07 被阅读2次

实现按钮点击加减

1.原生js逻辑
原理:先取dom上的元素,再添加事件
过程都要经过先取得dom上的元素再进行操作

  1. React
    思路:干掉取dom这一环
let number=0
let span=React.createElement('span',{className:'red'},number)

let onClickButton=()=>{
  number+=1
  render()
}

let onClickButton2=()=>{
  number-=1
  render()
}
render()


function render(){
  let span=React.createElement('span',{className:'red'},number)
    
  let button =React.createElement('button',{onClick:onClickButton},'+')
  
  let button2 =React.createElement('button',{onClick:onClickButton2},'-')

    let div=React.createElement('div',{className:'parent'},
                                span,button,button2)

  ReactDOM.render(div,document.querySelector('#root'))

}

且react可以进行局部更新,上面只会更新span里的number

优化render

let h=React.createElement

let number=0
let onClickButton=()=>{
  number+=1
  render()
}

let onClickButton2=()=>{
  number-=1
  render()
}
render()


function render(){

    let div=
        h('div',{className:'parent'},
          h('span',{className:'red'},number),
          h('button',{onClick:onClickButton},'+'),
          h('button',{onClick:onClickButton2},'-')
         )

  ReactDOM.render(div,document.querySelector('#root'))

}

发现:下面的有点像html标签
则引入了JSX的语法


     <div class='parent'>
       <span class="red">{number}</span>
       <button onClick={onClickButton}>+</button>
       <button onClick={onClickButton2}>-</button>
     </div>
    

可以用webpack下的babel进行转译
最终


let number=0
let onClickButton=()=>{
  number+=1
  render()
}

let onClickButton2=()=>{
  number-=1
  render()
}
render()


function render(){        
    ReactDOM.render( 
     <div class='parent'>
       <span class="red">{number}</span>
       <button onClick={onClickButton}>+</button>
       <button onClick={onClickButton2}>-</button>
     </div>,
      document.querySelector('#root')
  )
}

相关文章

网友评论

      本文标题:探一下底层

      本文链接:https://www.haomeiwen.com/subject/zyvrrqtx.html