React.Component 和 funtion 组件的区别

结论:需要根据state进行渲染时,使用React.Component;用不到state时,可以直接写函数组件。

 

Function 函数组件:可以接收入参(props),通过return返回dom结构。

function Hello(props) {
    return <h1>Hello, {props.name}!</h1>;
}
 
ReactDOM.render(
    <Hello name="Jack" />, 
    document.getElementById('root')
);

 

React.Component 是一个class(类),不止可以接收props,也支持state,还包含了生命周期函数,在render函数内返回dom结构。

class Hello extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            myname:""
        };
    }

    componentDidMount(){
        this.setState({
            myname:"baby"
        })
    }

    render() {
        return (
            <div>
                <h1>Hello, {this.props.name}!</h1>
                <h1>I am {this.state.myname}</h1>
            </div>
        );
    }
}

ReactDOM.render(
    <Hello name="Jack" />,
    document.getElementById('root')
);

 

Hook 是React的新特性,通过 useState 和 EffectState 方法,让函数组件也支持了state。

// Hook写法
import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  });

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

// 对应Class写法
class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }

  componentDidMount() {
    document.title = `You clicked ${this.state.count} times`;
  }

  componentDidUpdate() {
    document.title = `You clicked ${this.state.count} times`;
  }

  render() {
    return (
      <div>
        <p>You clicked {this.state.count} times</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click me
        </button>
      </div>
    );
  }
}

 

posted @ 2020-03-17 01:13  前端大兵  阅读(1124)  评论(0编辑  收藏  举报