クラスコンポーネントの状態と useState フックの違いは何ですか?

Dec 15, 2025

伝言を残す

React 開発の動的な世界では、さまざまな状態管理手法間のニュアンスを理解することが重要です。私はフックのサプライヤーとして、従来のクラス コンポーネントからより現代的な useState フックに至るまで、React における状態処理の進化を直接目撃してきました。このブログでは、クラス コンポーネントの状態と useState フックの違いを詳しく掘り下げ、開発者が情報に基づいた意思決定を行うのに役立つ洞察を提供します。

クラスコンポーネント内の状態: 従来のアプローチ

React のクラス コンポーネントは、長い間、状態を管理するための頼りになるメソッドでした。クラス コンポーネントでは、state はコンストラクターで初期化されるインスタンス変数です。次の例を考えてみましょう。

import React, { コンポーネント } from'react'; class CounterClass extends Component {constructor(props) { super(props); this.state = { カウント: 0 };インクリメント = () => { this.setState({ count: this.state.count + 1 }); } render() { return ( <div> <p>カウント: {this.state.count}</p> <button onClick={this.increment}>増分</button> </div> );デフォルトの CounterClass をエクスポートします。

このコードでは、という名前のクラス コンポーネントを作成します。カウンタクラス。状態はコンストラクター内で次のように初期化されます。カウントプロパティを 0 に設定します。状態を更新するには、this.setState方法。このメソッドは非同期であり、React はパフォーマンス上の理由から複数の状態更新をバッチ処理します。

クラス コンポーネントの状態の重要な特徴の 1 つは、それがオブジェクトであることです。これにより、関連するデータをグループ化することができます。たとえば、フォーム コンポーネントを構築している場合、各フォーム フィールドのプロパティを持つ状態オブジェクトを作成できます。

import React, { コンポーネント } from'react'; class FormClass extends Component {constructor(props) { super(props); this.state = { 名前: ''、電子メール: '' }; handleNameChange = (e) => { this.setState({ name: e.target.value }); handleEmailChange = (e) => { this.setState({ email: e.target.value }); } render() { return ( <form> <input type="text" placeholder="Name" value={this.state.name} onChange={this.handleNameChange} /> <input type="email" placeholder="Email" value={this.state.email} onChange={this.handleEmailChange} /> </form> );デフォルトの FormClass をエクスポートします。

ただし、クラス コンポーネントにはいくつかの欠点もあります。特に複雑な状態ロジックを扱う場合、コードが冗長になる可能性があります。のこれキーワードは混乱を招く可能性があり、JavaScript についての十分な理解が必要です。これ拘束力のあるルール。

useState フック: 最新の代替手段

useState フックは、Hooks API の一部として React 16.8 で導入されました。これは、機能コンポーネントの状態を管理するためのより簡潔で機能的な方法を提供します。書き換えてみましょうカウンタクラスuseState フックを使用するコンポーネント:

import React, { useState } from'react'; const CounterHook = () => { const [count, setCount] = useState(0); const インクリメント = () => { setCount(count + 1); } return ( <div> <p>カウント: {count}</p> <button onClick={increment}>増分</button> </div> );デフォルトの CounterHook をエクスポートします。

このコードでは、使用状態状態変数を作成するフックカウントそして関数セットカウント更新してください。の使用状態フックは引数として初期値 (この場合は 0) を取ります。クラスコンポーネント内の状態とは異なり、クラスコンポーネントによって管理される状態は、使用状態フックはオブジェクトだけでなく、任意のデータ型にすることができます。

フォームの例では、複数のフォームを使用できます。使用状態フック:

import React, { useState } from'react'; const FormHook = () => { const [name, setName] = useState(''); const [電子メール、setEmail] = useState(''); const handleNameChange = (e) => { setName(e.target.value); const handleEmailChange = (e) => { setEmail(e.target.value); } return ( <form> <input type="text" placeholder="Name" value={name} onChange={handleNameChange} /> <input type="email" placeholder="Email" value={email} onChange={handleEmailChange} /> </form> );デフォルトの FormHook をエクスポートします。

useState フックにはいくつかの利点があります。コードがより簡潔になり、読みやすくなります。機能部品で使用されるため、特に問題なく使用できます。これキーワード。また、より機能的なプログラミング スタイルを促進し、より予測可能でテストしやすいコードを実現できます。

主な違い

構文と読みやすさ

useState フックの構文は、クラス コンポーネントと比較してはるかに簡潔です。クラスコンポーネントでは、コンストラクターを定義し、状態を初期化し、これキーワード。 useState フックを使用すると、機能コンポーネント内の 1 行のコードで状態を管理できます。これにより、特に新しい開発者にとって、コードが理解しやすくなります。

状態の初期化

クラスコンポーネントでは、状態はコンストラクターで初期化されます。初期状態が props に依存する場合は、コンストラクター内で計算を実行する必要があります。 useState フックを使用すると、関数を初期値として渡すことができます。この関数は最初のレンダリング時にのみ呼び出され、負荷の高い計算に役立ちます。

const [value, setValue] = useState(() => { // ここで高価な計算を実行します return someExpensiveCalculation(); });

状態の更新

クラスコンポーネントでは、this.setStateメソッドは非同期であり、React は複数の状態更新をバッチ処理します。以前の状態に基づいて状態を更新するときは、関数を渡す必要があります。this.setState:

this.setState((prevState) => { return { count: prevState.count + 1 }; });

useState フックを使用すると、前の状態に基づいて状態を更新する必要がある場合に、状態更新関数に関数を渡すこともできます。

setCount((prevCount) => prevCount + 1);

コンポーネントのライフサイクル

クラスコンポーネントには、次のようなメソッドを使用して明確に定義されたライフサイクルがあります。コンポーネントDidMountコンポーネントDidUpdate、 そしてコンポーネントはアンマウントします。クラスコンポーネントの副作用の管理は複雑になる場合があります。 useState フックは、機能コンポーネントの副作用を処理するために useEffect フックと組み合わせてよく使用されます。 useEffect フックは、副作用を管理するためのより柔軟で直感的な方法を提供します。

new england bathroom accessoriesnew design bathroom accessories

アプリケーションとユースケース

シンプルな状態管理

ブール値の切り替えやカウンターの増加などの単純な状態管理タスクには、useState フックが最適です。そのシンプルさと読みやすさにより、小規模なアプリケーションやコンポーネントに最適です。

複雑な状態のロジック

複数の関連データ ポイントを含む複雑な状態ロジックがある場合でも、クラス コンポーネントが役立つことがあります。クラス コンポーネントの状態はオブジェクトであるため、関連するデータをグループ化し、複雑な更新を管理することが容易になります。ただし、複数の useState フックとカスタム フックを使用すると、機能コンポーネントで複雑な状態を処理することもできます。

結論

フックのサプライヤーとして、私は開発者に状態管理のための適切なツールを提供することの重要性を理解しています。クラス内の状態コンポーネントと useState フックには、それぞれ独自の長所と短所があります。どちらを選択するかは、プロジェクトの特定の要件、状態ロジックの複雑さ、および開発者の好みによって異なります。

状態管理やその他の目的であっても、React プロジェクト用の高品質なフックをお探しの場合は、私たちがお手伝いいたします。アプリケーションのパフォーマンスと機能を強化できる幅広いフックを提供します。以下を含む当社の製品範囲を探索できます。ゴールドのバスルームフックそしてバスルームアクセサリー タオルフック、現代の Web 開発の多様なニーズを満たすように設計されています。

当社の製品やサービスにご興味がございましたら、調達やさらなるご相談についてお気軽にお問い合わせください。当社はお客様に優れたサポートとソリューションを提供することに尽力しています。

参考文献

  • React 公式ドキュメント
  • React フック API リファレンス
  • JavaScript: 決定版ガイド (デビッド・フラナガン著)

お問い合わせを送る