美文网首页
函数组件&class组件

函数组件&class组件

作者: clumsy钧 | 来源:发表于2019-01-05 20:46 被阅读3次
let number=0
let onClickButton=()=>{
  number+=1
  render()
}

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

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

)
}
function Box2(){
return (
<div class='parent'>
       <span class="red">{number}</span>
       <button onClick={onClickButton}>+</button>
       <button onClick={onClickButton2}>-</button>
     </div>
  )
}
function App(){
  return(
     <div>
        <Box1/>
        <Box2/>
     </div>
   )
}
render()


function render(){        
    ReactDOM.render( 
     <App/>,
      document.querySelector('#root')
  )
}

注意 组件的名称得大写 如上面的App Box1 Box2
我第一次用的时候没注意用的小写执行不了
上述代码发现的一个问题

函数并不足够组件化

因为一旦render 就是整个页面进行render

转用class


function App(props){
  return (
    <div>
      <Box1 name="frank"/>
      <Box2 name="jack"/>
    </div>
  )
}

class Box1 extends React.Component{
  constructor(props){
    super(props)
    this.state = {
      number: 0
    }
  }
  add(){
    this.setState({
      number: this.state.number + 1
    })
  }
  minus(){
    this.setState({
      number: this.state.number - 1
    })
    
    this.state.number -= 1
    render()
  }
  render(){
    return (
      <div className="red">
        <span>{this.state.number}</span>
        <button onClick={this.add.bind(this)}>+</button>
        <button onClick={this.minus.bind(this)}>-</button>
        {this.props.name}
      </div>
    )
  }
}

class Box2 extends React.Component{
  constructor(props){
    super(props)
    this.state = {
      number: 0
    }
  }
  add(){
    console.log(this,'2222222')

    this.setState({
      number: this.state.number + 2
    })
  }
  minus(){
    this.setState({
      number: this.state.number - 2
    })
  }
  render(){
    return (
      <div className="red">
        <span>{this.state.number}</span>
        <button onClick={this.add.bind(this)}>+2</button>
        <button onClick={this.minus.bind(this)}>-2</button>
        {this.props.name}
      </div>
    )
  }
}


render()



function render(){
  ReactDOM.render(
    <App/>,  // React.createElement(App)
    document.querySelector('#root')
  )
}
  1. 用class必须要extend React.Componen
  2. constructor 要接受props
  3. constructor 中必须写一个 super(props)(JS规定的)
  4. 在constructor 中初始化this.state 里面的内容为你规定的变量
  5. 出发的事件可以写在constructor外面
  6. render 函数返回具有一个根元素的标签
    且 里面要使用变量和被传入的值需要 this.state.number this.props.name
    绑定事件要bind this

为什么要用setState?

setState会将大批量的更新合并成一次更新

代码连接

相关文章

  • React 入门 3:组件的诞生

    本篇关于组件的诞生,包括函数组件和 class 组件。简单组件用函数,复杂组件用 class。 组件的构想 (一)...

  • 函数组件&class组件

    注意 组件的名称得大写 如上面的App Box1 Box2我第一次用的时候没注意用的小写执行不了上述代码发现的一个...

  • 笔记-React-Hooks

    一、矛与盾的问题?(Class组件与函数式组件)   在 React 中 Class 组件好用还是函数式组件好用呢...

  • TypeScript(-1):ts + react 常用知识点

    目录 1 class 组件 props 约束 2 class 组件 state 约束 3 函数组件 props 约...

  • React基础知识

    基本 React 中的组件分为函数组件和类组件区分的话,简单的组件我们就用函数,如果复杂就用 class;函数组件...

  • React Hooks

    前言 React中组件分为两大类:Class类式组件、函数式组件 React v16.8以前: Class类式组件...

  • 04:class组件与生命周期

    class组件基础 React的组件可以定义为 class 或者 函数 的形式。组件接收Props输入,并返回Re...

  • React 中被忽略的函数组件(Functional Compo

    React中有两种组件:函数组件(Functional Components) 和类组件(Class Compon...

  • 组件类型(函数式组件和类组件)

    React中有两种组件:函数组件(Functional Components) 和类组件(Class Compon...

  • React.Component

    前面我们了解到了React组件有函数组件和class组件两种,对比来说class组件功能更加丰富。接下来简单学习一...

网友评论

      本文标题:函数组件&class组件

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