ホームページ >ウェブフロントエンド >jsチュートリアル >React チートシート: 機能コンポーネント編

React チートシート: 機能コンポーネント編

PHPz
PHPzオリジナル
2024-08-07 01:00:33831ブラウズ

React Cheat Sheet: Functional Components Edition

React チートシート

React はその誕生以来大幅に進化し、Hook の台頭により、機能コンポーネントが React アプリケーションを構築するための頼りになるアプローチになりました。このチートシートでは、React で機能コンポーネントを使用するための主要な概念、機能、ベスト プラクティスの概要を説明します。

1. 機能部品の基礎

機能コンポーネントは、React 要素を返すプレーンな JavaScript 関数です。

const MyComponent = () => {
  return <div>Hello, World!</div>;
};

2.JSXの使用

JSX は、JavaScript 内で HTML のようなコードを記述できるようにする構文拡張機能です。

const MyComponent = () => {
  return (
    <div>
      <h1>Welcome to React</h1>
    </div>
  );
};

3. 小道具

Props は、親コンポーネントから子コンポーネントにデータを渡すために使用されます。

const Greeting = ({ name }) => {
  return <h1>Hello, {name}!</h1>;
};

// Usage
<Greeting name="Alice" />

4. デフォルトの小道具

コンポーネントのデフォルトの小道具を定義できます。

const Greeting = ({ name = "Guest" }) => {
  return <h1>Hello, {name}!</h1>;
};

5. useStateによる状態

useState フックを使用すると、機能コンポーネントに状態を追加できます。

import { useState } from 'react';

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

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
};

6. エフェクトフック: useEffect

useEffect フックを使用すると、機能コンポーネントで副作用を実行できます。

import { useEffect } from 'react';

const DataFetcher = () => {
  useEffect(() => {
    fetch('/api/data')
      .then(response => response.json())
      .then(data => console.log(data));
  }, []); // Empty dependency array means it runs once

  return <div>Data fetched. Check console.</div>;
};

7. 条件付きレンダリング

特定の条件に基づいてさまざまな UI 要素をレンダリングします。

const LoginMessage = ({ isLoggedIn }) => {
  return (
    <div>
      {isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please log in.</h1>}
    </div>
  );
};

8. リストとキー

データのリストをレンダリングし、キーを使用して React が変更された項目を識別できるようにします。

const ItemList = ({ items }) => {
  return (
    <ul>
      {items.map(item => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
};

9. イベント処理

機能コンポーネント内のイベントを処理します。

const Button = () => {
  const handleClick = () => {
    alert('Button clicked!');
  };

  return <button onClick={handleClick}>Click Me</button>;
};

10. フォームと制御コンポーネント

制御されたコンポーネントを使用してフォーム入力を処理します。

const Form = () => {
  const [value, setValue] = useState('');

  const handleChange = (e) => {
    setValue(e.target.value);
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    alert(`Submitted value: ${value}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" value={value} onChange={handleChange} />
      <button type="submit">Submit</button>
    </form>
  );
};

11. コンテキスト API

コンポーネント ツリー全体の状態管理には Context API を使用します。

import { createContext, useContext } from 'react';

const MyContext = createContext();

const MyProvider = ({ children }) => {
  const value = 'Hello from context';

  return (
    <MyContext.Provider value={value}>
      {children}
    </MyContext.Provider>
  );
};

const MyComponent = () => {
  const contextValue = useContext(MyContext);

  return <div>{contextValue}</div>;
};

12. カスタムフック

カスタムフックを使用して再利用可能なロジックを作成します。

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;
};

// Usage
const DataComponent = () => {
  const data = useFetch('/api/data');

  return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
};

13. useMemoによるメモ化

高価な計算をメモ化することでパフォーマンスを最適化します。

import { useMemo } from 'react';

const ExpensiveComponent = ({ number }) => {
  const expensiveCalculation = useMemo(() => {
    // Assume this is a computationally expensive operation
    return number * 2;
  }, [number]);

  return <div>{expensiveCalculation}</div>;
};

14.コールバックを使用する

useCallback を使用して関数をメモ化し、不要な再レンダリングを防ぎます。

import { useCallback } from 'react';

const Button = ({ onClick }) => {
  return <button onClick={onClick}>Click me</button>;
};

const ParentComponent = () => {
  const handleClick = useCallback(() => {
    console.log('Button clicked');
  }, []);

  return <Button onClick={handleClick} />;
};

15. useReducer

useReducer フックを使用して複雑な状態ロジックを管理します。

import { useReducer } from 'react';

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

const Counter = () => {
  const [state, dispatch] = useReducer(reducer, { count: 0 });

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

16. フラグメント

フラグメントを使用して、DOM に余分なノードを追加せずに複数の要素をグループ化します。

const MyComponent = () => {
  return (
    <>
      <h1>Title</h1>
      <p>Description</p>
    </>
  );
};

17. ポータル

親コンポーネントの DOM 階層の外にある DOM ノードに子をレンダリングします。

import { createPortal } from 'react-dom';

const Modal = ({ children }) => {
  return createPortal(
    <div className="modal">
      {children}
    </div>,
    document.getElementById('modal-root')
  );
};

18. エラー境界コンポーネントを使用したエラー境界

エラー境界にはクラスコンポーネントを使用します。

import { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    console.log(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children;
  }
}

// Usage
<ErrorBoundary>
  <MyComponent />
</ErrorBoundary>

19. React.lazy と Suspense による遅延読み込み

コンポーネントを動的にインポートして、初期ロード時間を短縮します。

import { lazy, Suspense } from 'react';

const LazyComponent = lazy(() => import('./LazyComponent'));

const App = () => {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <LazyComponent />
    </Suspense>
  );
};

20. 型チェックのための PropType

プロパティ タイプを使用して、コンポーネントのプロパティ タイプを文書化して強制します。

import PropTypes from 'prop-types';

const Greeting = ({ name }) => {
  return <h1>Hello, {name}!</h1>;
};

Greeting.propTypes = {
  name: PropTypes.string.isRequired,
};

機能コンポーネントは、特にフックによって導入された強力な機能を使用して、React アプリケーションを構築するクリーンで簡単な方法を提供します。このチートシートは、重要な概念へのクイックリファレンスを提供し、効果的かつ効率的な React コードを作成するのに役立ちます。

以上がReact チートシート: 機能コンポーネント編の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。