さまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?
Mar 19, 2025 pm 01:32 PMさまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?
Reactコンポーネントは、Reactアプリケーションの構成要素であり、機能コンポーネントとクラスコンポーネントの2つの主要なタイプに分類できます。
-
機能コンポーネント:
- 最初にコンポーネントを書き込むより簡単な方法として導入された機能コンポーネントは、基本的にJavaScript関数です。
- 彼らは小道具を議論として受け入れ、UIを記述するために反応要素を返します。
- フックの導入(React 16.8から始まる)により、機能成分は状態および副作用を処理する能力を獲得し、クラスコンポーネントと同じくらい強力にしました。
-
機能的なコンポーネントの基本的な例は次のとおりです。
<code class="javascript">function Welcome(props) { return <h1 id="Hello-props-name">Hello, {props.name}</h1>; }</code>
ログイン後にコピー
-
クラスコンポーネント:
- クラスコンポーネントは、
React.Component
を拡張するES6クラスです。 - 彼らはより複雑な構文を持ち、
this
使用して小道具、状態、およびライフサイクルの方法にアクセスする必要があります。 - クラスコンポーネントには、コンポーネントのライフサイクルの管理に使用される
componentDidMount
、componentDidUpdate
、componentWillUnmount
などのライフサイクル方法があります。 -
クラスコンポーネントの基本的な例は次のとおりです。
<code class="javascript">class Welcome extends React.Component { render() { return <h1 id="Hello-this-props-name">Hello, {this.props.name}</h1>; } }</code>
ログイン後にコピー
- クラスコンポーネントは、
反応のクラスコンポーネントに対して、機能コンポーネントとクラスコンポーネントをいつ使用する必要がありますか?
機能コンポーネントとクラスコンポーネントの選択は、使用しているReactのバージョンとコンポーネントの特定のニーズに大きく依存します。
-
次の場合は機能コンポーネントを使用します。
- よりシンプルで簡潔な構文が必要です。機能コンポーネントは読み書きが簡単です。
- React 16.8以降を使用しており、州の管理と副作用のためにフックを活用できます。
useState
、useEffect
、useContext
などのフックは、機能コンポーネントをより強力で多用途にします。 - クラスコンポーネントでエラーが発生しやすい場合がある
this
とライフサイクルの方法に対処することを避けたいと思います。 - よりテストしやすく、リファクタリングが簡単なコンポーネントを作成したいと考えています。
-
次の場合はクラスコンポーネントを使用します。
- フックをサポートしていない古いバージョンのReactを使用しています(React 16.8より前)。
-
getDerivedStateFromProps
やgetSnapshotBeforeUpdate
など、フックで簡単に複製できない特定のライフサイクルメソッドを使用する必要があります。 - クラスコンポーネントを使用して記述された既存のコードベースを維持しており、機能的なコンポーネントにリファクタリングすることは、現時点では優先事項でも実用的でもありません。
現代の反応開発では、フックを備えた機能的成分は、単純さと以前はクラスコンポーネント専用のすべての機能を処理する能力のために好まれます。
機能コンポーネントとクラスコンポーネントの間の国家管理の重要な違いは何ですか?
Reactの状態管理は、フックの導入とともに大幅に進化しており、機能的コンポーネントとクラスコンポーネントでの状態がどのように処理されるかに影響します。
-
クラスコンポーネントの状態:
- クラスコンポーネントは、コンストラクターで初期化された
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>
ログイン後にコピー
- クラスコンポーネントは、コンストラクターで初期化された
-
機能コンポーネントの状態:
- 機能コンポーネントは、
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
andthis.setState()
を使用しますが、機能コンポーネントはuseState
のようなフックを使用します。 -
非同期更新:クラスコンポーネントの
this.setState()
は非同期ですが、useState
の更新は同期しています。 -
ライフサイクル管理:クラスコンポーネントはライフサイクル手法を使用して副作用を処理しますが、機能コンポーネントは同じ目的で
useEffect
使用します。
クラスコンポーネントと比較して、フックを使用して機能コンポーネントのパフォーマンスを最適化するにはどうすればよいですか?
Reactコンポーネントのパフォーマンスを最適化することは、効率的なアプリケーションを構築するために重要です。この点で、フックを備えた機能コンポーネントは、クラスコンポーネントよりもいくつかの利点を提供します。
-
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
を使用する必要があります。
- 機能コンポーネントでは、
-
React.memo
で不必要な再レンダーを回避する:-
React.memo
を使用して機能的なコンポーネントをメモ化することができ、小道具が変更されていない場合は不要な再レンダーを防ぎます。 -
例:
<code class="javascript">const MyComponent = React.memo(function MyComponent(props) { // Component implementation });</code>
ログイン後にコピー - クラスコンポーネントは、
PureComponent
を使用したり、shouldComponentUpdate
を実装して同様の結果を達成できますが、これらの方法はReact.memo
よりも柔軟性が低くなります。
-
-
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()
で管理されます。
- 機能コンポーネントでは、
-
useEffect
によるライフサイクルの最適化:- 機能コンポーネントの
useEffect
、クリーンアップや依存関係ベースの更新など、副作用を細かく制御できます。 - これは、複数のライフサイクル方法を管理することが複雑になり、潜在的なパフォーマンスの問題につながる可能性のあるクラスコンポーネントのライフサイクル方法よりも効率的です。
-
例:
<code class="javascript">function MyComponent() { useEffect(() => { // Side effect code here return () => { // Cleanup code here }; }, [/* dependencies */]); // Component implementation }</code>
ログイン後にコピー
- 機能コンポーネントの
要約すると、フックを備えた機能コンポーネントは、クラスコンポーネントと比較してパフォーマンスを最適化するためのより柔軟で効率的な方法を提供します。 useMemo
、 useCallback
、 useEffect
などのフックを活用することにより、開発者はより少ないボイラープレートコードでより良いパフォーマンスを達成できます。
以上がさまざまなタイプのReactコンポーネント(機能、クラス)は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











UseEffectとは何ですか?副作用を実行するためにどのように使用しますか?

JavaScriptの高次関数とは何ですか?また、より簡潔で再利用可能なコードを書くためにどのように使用できますか?

usecontextとは何ですか?コンポーネント間で状態を共有するためにどのように使用しますか?

制御されたコンポーネントと制御されていないコンポーネントの利点と短所は何ですか?
