探一下底层

2019-01-05  本文已影响2人  clumsy钧

实现按钮点击加减

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')
  )
}

上一篇 下一篇

猜你喜欢

热点阅读