学习react(二)--组件


1、函数式组件

    function Demo(){
      return 

Hello World

; } ReactDOM.render(, document.getElementById('app'));

??执行了 ReactDOM.render(, document.getElementById('app'));后,react帮我们进行的操作:

????「1」React解析组件标签,找到了Demo组件;

????「2」发现组件是使用函数定义的,然后调用该函数,将返回的虚拟dom转换为真实dom,然后添加到dom树上,最后呈现到页面中。

 2、类式组件

??ES6类:

????「1」类中的构造器不是必须写的,要对实例进行一些初始化操作,例如添加指定属性时才写;

????「2」如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的;

????「3」类中所定义的方法,都是放在了类的原型对象上,供实例去使用。

//类式组件
  class Demo extends React.Component {
    render () {
      return 

Hello World

; } } ReactDOM.render(, document.getElementById('app'))

 ?执行了 ReactDOM.render(, document.getElementById('app'));后,react帮我们进行的操作:

????「1」React解析组件标签,找到了Demo组件;

????「2」发现组件是使用类定义的,然后new出来该类的实例,并通过该实例调用原型上的render方法;

????「3」将render返回的虚拟dom转换为真实dom,然后添加到dom树上,最后呈现到页面中。

3、组件三大属性之一state 

??在类组件内使用state

class Demo extends React.Component {
     constructor (props) {
      super(props)
        this.state = {
            msg: 'hello world'
        }
    }
    render () {
      const {msg} = this.state
      return 

{msg}

; } } ReactDOM.render(, document.getElementById('app'))

  在类组件内使用函数

class Demo extends React.Component {
    constructor (props) {
      super(props)
      //因为内部的函数调用是通过类的调用,而不是通过类的实例对象的调用,所以函数内部的this指向为undefined,需要借助bind来修改类内部的this指向
      this.click = this.click.bind(this)
      this.state = {
        hot: true,
      }
    }

    render () {
      console.log(this)
      const { hot } = this.state
      //这里注意不能写this.click(),因为传递给onClick的应该是一个函数,如果写this.click()那么就调用了click这个函数,把这个函数的返回值赋给了onClick
      return 

今天天气很{hot ? '热' : '冷'}

; } click () { //react内实现变量的响应式需要使用this.setState() this.setState({ hot: !this.state.hot, }) } }