react创建组件的两种方式

2019-03-10  本文已影响0人  Mr无愧于心

组件的渲染过程

调取组件的时候,babel解析,传递给createElement的第一个参数type不再是字符串标签名,而是函数或者类,生成的对象中,type也是一个函数,当render渲染的时候会根据type的类型不同而做不同的事情(如果是字符串就创建元素,如果是函数,就会把函数执行,把返回的jsx对象创建成为新的元素进行渲染),函数执行的时候会把解析出来的对象中的props作为属性传递给组件

函数式创建组件

  1. 函数返回一个jsx
  2. props储存的值是一个对象,包含了调用组件时候传递的属性值(不传是一个空对象)
ReactDOM.render(<div>
  <ComponentA props1={12} className="class1">
    <span>lalla</span>
  </ComponentA >
</div>,root)

function ComponentA(props){
  let {props1,className,children}=props
  return <div className={className}>
  <span>{props1}<span>
  <p>{props2}<p>
  {children}//就是<span>lalla</span>
</div>
}

只能通过操作组件的DOM修改组件,使用ref属性获取元素
没有自己的状态state

类式创建组件

基于继承component类来创建组件

class  ComponentB extends React.Component{
  constructor(props){
    super(props)
    //super必须写 否则报错,相当于React.Component.call(this),就是call继承,继承父级私有属性
    //在继承私有的时候,把传递的属性挂载到了子类的实例上,在constructor中就可以使用this.props了
     /** 
     *{
      *  this.props//属性集合
      *  this.refs//refs集合
      *  this.context//上下文
     * }
      */
    this.state={//相当于vue组件中的data
      name:123
    }
  }
  render(){
    return <div>{this.state.name}{this.props.aa}</div>
  }
}

区别

上一篇下一篇

猜你喜欢

热点阅读