ホームページ > ウェブフロントエンド > フロントエンドQ&A > さまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?

さまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?

Robert Michael Kim
リリース: 2025-03-19 13:32:34
オリジナル
389 人が閲覧しました

さまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?

Reactコンポーネントは、Reactアプリケーションの構成要素であり、機能コンポーネントとクラスコンポーネントの2つの主要なタイプに分類できます。

  1. 機能コンポーネント:

    • 最初にコンポーネントを書き込むより簡単な方法として導入された機能コンポーネントは、基本的にJavaScript関数です。
    • 彼らは小道具を議論として受け入れ、UIを記述するために反応要素を返します。
    • フックの導入(React 16.8から始まる)により、機能成分は状態および副作用を処理する能力を獲得し、クラスコンポーネントと同じくらい強力にしました。
    • 機能的なコンポーネントの基本的な例は次のとおりです。

       <code class="javascript">function Welcome(props) { return <h1>Hello, {props.name}</h1>; }</code>
      ログイン後にコピー
  2. クラスコンポーネント:

    • クラスコンポーネントは、 React.Componentを拡張するES6クラスです。
    • 彼らはより複雑な構文を持ち、 this使用して小道具、状態、およびライフサイクルの方法にアクセスする必要があります。
    • クラスコンポーネントには、コンポーネントのライフサイクルの管理に使用されるcomponentDidMountcomponentDidUpdatecomponentWillUnmountなどのライフサイクル方法があります。
    • クラスコンポーネントの基本的な例は次のとおりです。

       <code class="javascript">class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }</code>
      ログイン後にコピー

反応のクラスコンポーネントに対して、機能コンポーネントとクラスコンポーネントをいつ使用する必要がありますか?

機能コンポーネントとクラスコンポーネントの選択は、使用しているReactのバージョンとコンポーネントの特定のニーズに大きく依存します。

  1. 次の場合は機能コンポーネントを使用します。

    • よりシンプルで簡潔な構文が必要です。機能コンポーネントは読み書きが簡単です。
    • React 16.8以降を使用しており、州の管理と副作用のためにフックを活用できます。 useStateuseEffectuseContextなどのフックは、機能コンポーネントをより強力で多用途にします。
    • クラスコンポーネントでエラーが発生しやすい場合があるthisとライフサイクルの方法に対処することを避けたいと思います。
    • よりテストしやすく、リファクタリングが簡単なコンポーネントを作成したいと考えています。
  2. 次の場合はクラスコンポーネントを使用します。

    • フックをサポートしていない古いバージョンのReactを使用しています(React 16.8より前)。
    • getDerivedStateFromPropsgetSnapshotBeforeUpdateなど、フックで簡単に複製できない特定のライフサイクルメソッドを使用する必要があります。
    • クラスコンポーネントを使用して記述された既存のコードベースを維持しており、機能的なコンポーネントにリファクタリングすることは、現時点では優先事項でも実用的でもありません。

現代の反応開発では、フックを備えた機能的成分は、単純さと以前はクラスコンポーネント専用のすべての機能を処理する能力のために好まれます。

機能コンポーネントとクラスコンポーネントの間の国家管理の重要な違いは何ですか?

Reactの状態管理は、フックの導入とともに大幅に進化しており、機能的コンポーネントとクラスコンポーネントでの状態がどのように処理されるかに影響します。

  1. クラスコンポーネントの状態:

    • クラスコンポーネントは、コンストラクターで初期化されたstateオブジェクトを介して状態を管理します。
    • stateおよびthis.state this.setState()を使用して、状態にアクセスおよび更新されます。
    • this.setState()は非同期であり、状態が更新された後に実行するコールバック関数を受け入れることができます。
    • 例:

       <code class="javascript">class Counter extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } increment = () => { this.setState({ count: this.state.count 1 }); } render() { return ( <div> <p>Count: {this.state.count}</p> <button onclick="{this.increment}">Increment</button> </div> ); } }</code>
      ログイン後にコピー
  2. 機能コンポーネントの状態:

    • 機能コンポーネントは、 useStateフックを使用して状態を管理します。
    • useState 、状態変数とそれを更新する関数を返します。
    • 状態の更新は同期であり、更新された状態をすぐに使用できます。
    • 例:

       <code class="javascript">function Counter() { const [count, setCount] = useState(0); const increment = () => { setCount(count 1); } return ( <div> <p>Count: {count}</p> <button onclick="{increment}">Increment</button> </div> ); }</code>
      ログイン後にコピー

重要な違いは次のとおりです。

  • 構文:クラスコンポーネントはthis.state and this.setState()を使用しますが、機能コンポーネントはuseStateのようなフックを使用します。
  • 非同期更新:クラスコンポーネントのthis.setState()は非同期ですが、 useStateの更新は同期しています。
  • ライフサイクル管理:クラスコンポーネントはライフサイクル手法を使用して副作用を処理しますが、機能コンポーネントは同じ目的でuseEffect使用します。

クラスコンポーネントと比較して、フックを使用して機能コンポーネントのパフォーマンスを最適化するにはどうすればよいですか?

Reactコンポーネントのパフォーマンスを最適化することは、効率的なアプリケーションを構築するために重要です。この点で、フックを備えた機能コンポーネントは、クラスコンポーネントよりもいくつかの利点を提供します。

  1. useMemoおよびuseCallbackでのメモ:

    • 機能コンポーネントでは、 useMemo使用して高価な計算をメモ化し、 useCallbackメモ機能にしてメモ化できます。これにより、値の再計算や機能の再現を防ぐことにより、不必要な再レンダーが防止されます。
    • useMemoの例:

       <code class="javascript">function MyComponent({ prop }) { const expensiveResult = useMemo(() => computeExpensiveValue(prop), [prop]); return <div>{expensiveResult}</div>; }</code>
      ログイン後にコピー
    • クラスコンポーネントでは、同じレベルの最適化を実現するにはshouldComponentUpdateが手動で実装されるか、 React.memoを使用する必要があります。
  2. React.memoで不必要な再レンダーを回避する:

    • React.memoを使用して機能的なコンポーネントをメモ化することができ、小道具が変更されていない場合は不要な再レンダーを防ぎます。
    • 例:

       <code class="javascript">const MyComponent = React.memo(function MyComponent(props) { // Component implementation });</code>
      ログイン後にコピー
    • クラスコンポーネントは、 PureComponentを使用したり、 shouldComponentUpdateを実装して同様の結果を達成できますが、これらの方法はReact.memoよりも柔軟性が低くなります。
  3. useStateおよびuseReducerを使用して状態の更新を最適化します。

    • 機能コンポーネントでは、 useCallbackと組み合わせてuseStateおよびuseReducer使用して、コールバックが不必要な再レンダーを引き起こさないようにすることができます。
    • useReducerの例:

       <code class="javascript">const initialState = { count: 0 }; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count 1 }; default: throw new Error(); } } function Counter() { const [state, dispatch] = useReducer(reducer, initialState); return (  Count: {state.count} <button onclick="{()"> dispatch({ type: 'increment' })}> </button> > ); }</code>
      ログイン後にコピー
    • クラスコンポーネントでは、状態の更新は通常、 this.setState()で管理されます。
  4. useEffectによるライフサイクルの最適化:

    • 機能コンポーネントのuseEffect 、クリーンアップや依存関係ベースの更新など、副作用を細かく制御できます。
    • これは、複数のライフサイクル方法を管理することが複雑になり、潜在的なパフォーマンスの問題につながる可能性のあるクラスコンポーネントのライフサイクル方法よりも効率的です。
    • 例:

       <code class="javascript">function MyComponent() { useEffect(() => { // Side effect code here return () => { // Cleanup code here }; }, [/* dependencies */]); // Component implementation }</code>
      ログイン後にコピー

要約すると、フックを備えた機能コンポーネントは、クラスコンポーネントと比較してパフォーマンスを最適化するためのより柔軟で効率的な方法を提供します。 useMemouseCallbackuseEffectなどのフックを活用することにより、開発者はより少ないボイラープレートコードでより良いパフォーマンスを達成できます。

以上がさまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート