tamakipedia

フロントエンドエンジニア。Typescriptもう特訓中です。一日の振り返りや学んだことをちょっとずつ吐いています。

【React】関数コンポーネントとクラスコンポーネントの違いについて

コンポーネント

クラスコンポーネント

① React.Component を拡張して作られるJavaScriptクラスである。

import React, { Component } from "react";     //拡張する Component をインポート

class ClassComponent extends Component {  // extends で拡張したクラスを生成
 render() {                          // レンダリングする要素は render() メソッド内で返される
    return <button>push here</button>;
 }
}

② propsの受け渡しは this.props を使う (プロパティー)

class ClassComponent extends React.Component {
  render() {
    const { who } = this.props;
 return <button>push { who }</button>;
  }
} 

③ state処理はconstructor内に記述する

class ClassComponent extends React.Component {
 constructor(props) {
   super(props);
   this.state = {
     count: 0
   };
 }

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

関数コンポーネント

① React.Component を拡張して作られるJavaScriptクラス。

import React from "react";
 
const FunctionalComponent = () => {
 return <button>push here</button>;
};

② props の受け渡しは引数にて行う。

const FunctionalComponent = ({ who }) => {
 return <button>push { who }</button>;
};

// <FunctionalComponent who="me" />

③ state処理はuseState()を使う。

const FunctionalComponent = () => {
 const [count, setCount] = useState(0);

 return (
   <div>
     <button onClick={() => setCount(count + 1)}>{count} time(s) pushed </button>
   </div>
 );
};