Reactコンポーネントは、Reactアプリケーションの構成要素であり、機能コンポーネントとクラスコンポーネントの2つの主要なタイプに分類できます。
機能コンポーネント:
機能的なコンポーネントの基本的な例は次のとおりです。
<code class="javascript">function Welcome(props) { return <h1>Hello, {props.name}</h1>; }</code>
クラスコンポーネント:
React.Component
を拡張するES6クラスです。this
使用して小道具、状態、およびライフサイクルの方法にアクセスする必要があります。componentDidMount
、 componentDidUpdate
、 componentWillUnmount
などのライフサイクル方法があります。クラスコンポーネントの基本的な例は次のとおりです。
<code class="javascript">class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }</code>
機能コンポーネントとクラスコンポーネントの選択は、使用しているReactのバージョンとコンポーネントの特定のニーズに大きく依存します。
次の場合は機能コンポーネントを使用します。
useState
、 useEffect
、 useContext
などのフックは、機能コンポーネントをより強力で多用途にします。this
とライフサイクルの方法に対処することを避けたいと思います。次の場合はクラスコンポーネントを使用します。
getDerivedStateFromProps
やgetSnapshotBeforeUpdate
など、フックで簡単に複製できない特定のライフサイクルメソッドを使用する必要があります。現代の反応開発では、フックを備えた機能的成分は、単純さと以前はクラスコンポーネント専用のすべての機能を処理する能力のために好まれます。
Reactの状態管理は、フックの導入とともに大幅に進化しており、機能的コンポーネントとクラスコンポーネントでの状態がどのように処理されるかに影響します。
クラスコンポーネントの状態:
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
and this.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 サイトの他の関連記事を参照してください。