ホームページ  >  記事  >  ウェブフロントエンド  >  ジュニアレベル: React のライフサイクル メソッドとフック

ジュニアレベル: React のライフサイクル メソッドとフック

WBOY
WBOYオリジナル
2024-07-17 22:46:40835ブラウズ

Junior level: Lifecycle Methods and Hooks in React

React Hook は、React での機能コンポーネントの作成方法に革命をもたらし、クラスを作成せずに状態やその他の React 機能を使用できるようにしました。このガイドでは、複雑な状態を管理し、パフォーマンスを最適化するための必須フック、カスタム フック、および高度なフック パターンを紹介します。

React フックの概要

React Hooks は、機能コンポーネントから React の状態とライフサイクル機能に「フック」できる機能です。フックは React 16.8 で導入され、機能コンポーネントで状態やその他の React 機能を使用するためのより直接的な方法を提供します。

フックの主な利点

  1. コードの簡素化: フックを使用すると、機能コンポーネントで状態メソッドとライフサイクル メソッドを直接使用できるため、コードがよりシンプルで読みやすくなります。
  2. ロジックの再利用: カスタム フックを使用すると、複数のコンポーネント間でステートフル ロジックを抽出して再利用できます。
  3. 拡張機能コンポーネント: フックは、クラスを使用せずに、状態や副作用の管理など、クラス コンポーネントのすべての機能を提供します。

必須のフック

使用状態

useState は、機能コンポーネントに状態を追加できるようにするフックです。

例:

import React, { useState } from 'react';

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

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
};

export default Counter;

この例では、useState はカウント状態変数を 0 に初期化します。setCount 関数は、ボタンがクリックされたときに状態を更新します。

useEffect

useEffect は、データの取得、DOM との直接対話、サブスクリプションの設定など、機能コンポーネントで副作用を実行できるようにするフックです。これは、クラス コンポーネント (componentDidMount、componentDidUpdate、componentWillUnmount) のいくつかのライフサイクル メソッドの機能を組み合わせたものです。

例:

import React, { useState, useEffect } from 'react';

const DataFetcher = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  return (
    <div>
      {data ? <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
: 'Loading...'}
); }; export default DataFetcher;

この例では、useEffect はコンポーネントのマウント時に API からデータを取得します。

useContext

useContext は、特定のコンテキストのコンテキスト値にアクセスできるようにするフックです。

例:

import React, { useContext } from 'react';

const ThemeContext = React.createContext('light');

const ThemedComponent = () => {
  const theme = useContext(ThemeContext);

  return <div>The current theme is {theme}</div>;
};

export default ThemedComponent;

この例では、useContext は ThemeContext の現在の値にアクセスします。

useReducer

useReducer は、機能コンポーネント内の複雑な状態ロジックを管理できるようにするフックです。これは useState の代替です。

例:

import React, { useReducer } from 'react';

const initialState = { count: 0 };

const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

const Counter = () => {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
    </div>
  );
};

export default Counter;

この例では、useReducer はリデューサー関数を使用してカウント状態を管理します。

カスタムフック

カスタム フックを使用すると、複数のコンポーネント間でステートフル ロジックを再利用できます。カスタムフックは、組み込みフックを使用する機能です。

例:

import { useState, useEffect } from 'react';

const useFetch = (url) => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url)
      .then(response => response.json())
      .then(data => setData(data));
  }, [url]);

  return data;
};

const DataFetcher = ({ url }) => {
  const data = useFetch(url);

  return (
    <div>
      {data ? <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
: 'Loading...'}
); }; export default DataFetcher;

この例では、useFetch は指定された URL からデータをフェッチするカスタム フックです。

高度なフックパターン

useReducer を使用した複雑な状態の管理

複数のサブ値を含む複雑な状態ロジックを扱う場合、または次の状態が前の状態に依存する場合、useState より useReducer の方が適切な場合があります。

例:

import React, { useReducer } from 'react';

const initialState = { count: 0 };

const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

const Counter = () => {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
    </div>
  );
};

export default Counter;

この例では、useReducer はリデューサー関数を使用してカウント状態を管理します。

useMemo と useCallback によるパフォーマンスの最適化

使用メモ

useMemo は計算された値をメモ化し、依存関係の 1 つが変更された場合にのみ再計算するフックです。レンダリングごとにコストのかかる計算を防止することで、パフォーマンスの最適化に役立ちます。

例:

import React, { useState, useMemo } from 'react';

const ExpensiveCalculation = ({ number }) => {
  const computeFactorial = (n) => {
    console.log('Computing factorial...');
    return n <= 1 ? 1 : n * computeFactorial(n - 1);
  };

  const factorial = useMemo(() => computeFactorial(number), [number]);

  return <div>Factorial of {number} is {factorial}</div>;
};

const App = () => {
  const [number, setNumber] = useState(5);

  return (
    <div>
      <input
        type="number"
        value={number}
        onChange={(e) => setNumber(parseInt(e.target.value, 10))}
      />
      <ExpensiveCalculation number={number} />
    </div>
  );
};

export default App;

この例では、useMemo により、数値が変更された場合にのみ階乗計算が再計算されることが保証されます。

useコールバック

useCallback は関数をメモ化するフックで、依存関係のいずれかが変更されない限り、レンダリングごとに関数が再作成されるのを防ぎます。これは、参照の等価性に依存する子コンポーネントに安定した関数を渡すのに役立ちます。

例:

import React, { useState, useCallback } from 'react';

const Button = React.memo(({ onClick, children }) => {
  console.log(`Rendering button - ${children}`);
  return <button onClick={onClick}>{children}</button>;
});

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

  const increment = useCallback(() => setCount((c) => c + 1), []);

  return (
    <div>
      <Button onClick={increment}>Increment</Button>
      <p>Count: {count}</p>
    </div>
  );
};

export default App;

この例では、useCallback により、依存関係が変更された場合にのみインクリメント関数が再作成され、Button コンポーネントの不必要な再レンダリングが防止されます。

結論

最新の React 開発には、React Hooks を理解して活用することが不可欠です。フックを使用すると、機能コンポーネントでよりクリーンで保守しやすいコードを作成できます。 useState、useEffect、useContext、useReducer などの重要なフックに加え、カスタム フックや useMemo や useCallback によるパフォーマンスの最適化などの高度なパターンを習得することで、堅牢で効率的な React アプリケーションを構築できます。若手開発者として、これらの概念に慣れることで、高品質の React アプリケーションを開発および保守する能力が大幅に向上します。

以上がジュニアレベル: React のライフサイクル メソッドとフックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

if count for class number function dom this Access
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:@let を使用した Angular テンプレートのローカル変数次の記事:@let を使用した Angular テンプレートのローカル変数

関連記事

続きを見る