Reactは、モダンなWeb開発において欠かせないJavaScriptライブラリの一つです。その特徴は、コンポーネントベースの設計と仮想DOMを活用した効率的な更新処理にあります。この技術により、複雑なユーザーインターフェースを効率よく構築することが可能です。初心者にとっては、最初のセットアップや基本的な概念が少し難しく感じられるかもしれませんが、本記事ではインストールから最初のアプリケーション作成まで、わかりやすくステップバイステップで解説します。Reactを学ぶことで、フロントエンド開発の新たな可能性を発見できるでしょう。
Reactとは何か
Reactは、Facebookによって開発されたJavaScriptライブラリで、主にユーザーインターフェース(UI)を構築するために使用されます。シンプルで柔軟性が高く、他のライブラリやフレームワークとも容易に統合できます。
Reactの特徴
Reactの主な特徴として以下が挙げられます:
- コンポーネントベース: アプリケーションを再利用可能なコンポーネントとして構築します。これにより、開発効率とコードの可読性が向上します。
- 仮想DOM(Virtual DOM): 仮想DOMを利用することで、UIの更新が効率化され、パフォーマンスが向上します。
- 宣言型UI: 状態に基づいてUIを記述できるため、コードが直感的で理解しやすくなります。
Reactを選ぶ理由
- コミュニティとエコシステム: Reactは非常に活発なコミュニティとエコシステムを持っており、ライブラリやツールが豊富です。
- 柔軟性: サードパーティのライブラリやツールと簡単に統合できるため、必要に応じたカスタマイズが可能です。
- 業界標準: 多くの企業やプロジェクトで使用されており、学んでおくことでキャリアにおいて大きな武器となります。
Reactの用途
Reactは、以下のような用途で特に効果を発揮します:
- 単一ページアプリケーション(SPA)の構築
- 動的でインタラクティブなUIの作成
- ダッシュボードや管理画面の開発
Reactは初心者からプロフェッショナルまで幅広く利用されるツールであり、習得することでWeb開発の幅が大きく広がります。
開発環境の準備
Reactを始めるには、いくつかのツールとソフトウェアを準備する必要があります。ここでは、初心者向けに簡単なセットアップ手順を説明します。
必要なソフトウェアのインストール
1. Node.jsのインストール
Node.jsは、Reactプロジェクトの作成や実行に必要な環境を提供します。以下の手順でインストールします:
- Node.jsの公式サイト(https://nodejs.org)にアクセスします。
- 推奨版(LTS)をダウンロードしてインストールします。
- インストール後、以下のコマンドを実行して正常にインストールされたか確認します:
node -v
npm -v
これにより、Node.jsとnpm(Node Package Manager)のバージョンが表示されます。
2. エディタの準備
コードを書くためのエディタとして、Visual Studio Code(VS Code)を使用することをお勧めします:
- Visual Studio Codeの公式サイトからダウンロードしてインストールします。
- 必要に応じて「ESLint」や「Prettier」などの拡張機能をインストールして、コードの品質を向上させます。
Reactプロジェクトの初期化
1. Create React Appの利用
Create React Appは、初心者が簡単にReactプロジェクトを始められる公式のツールです。以下のコマンドを使用してプロジェクトを作成します:
npx create-react-app my-app
npx
コマンドはnpm経由で一時的にCreate React Appを実行します。my-app
はプロジェクトのフォルダ名です。
2. プロジェクトディレクトリへの移動
プロジェクトを作成したら、そのディレクトリに移動します:
cd my-app
3. 開発サーバーの起動
以下のコマンドでローカルサーバーを起動し、ブラウザでReactアプリケーションを確認します:
npm start
このコマンドを実行すると、ブラウザが自動的に起動し、http://localhost:3000
でアプリケーションが表示されます。
セットアップ完了後の確認
ブラウザに表示される初期画面には、Reactのロゴと「Edit src/App.js and save to reload.」というメッセージが表示されます。これがReactアプリケーションが正常に動作している証拠です。
これでReactを始めるための準備は完了です。次は実際にプロジェクトを作成していきましょう。
Reactプロジェクトの作成
Reactの基本が分かったところで、最初のプロジェクトを作成していきます。ここでは、初めてのReactアプリケーションを構築する具体的な手順を説明します。
初期セットアップの確認
前のステップでセットアップした開発環境が正しく動作しているか確認します。以下のコマンドでプロジェクトディレクトリに移動し、開発サーバーを起動します:
cd my-app
npm start
ブラウザでhttp://localhost:3000
が開き、Reactのデフォルトページが表示されることを確認してください。
プロジェクトのファイル構成
Reactアプリの基本的なディレクトリ構造を確認しましょう:
my-app/
├── node_modules/ // 依存ライブラリ
├── public/ // 公開用リソース
├── src/ // ソースコード
│ ├── App.css // メインのCSSファイル
│ ├── App.js // メインのReactコンポーネント
│ ├── index.css // グローバルスタイル
│ └── index.js // エントリーポイント
├── package.json // プロジェクト情報と依存関係
└── README.md // プロジェクト概要
初めてのReactコードの編集
1. App.jsの編集
src/App.js
を開き、デフォルトのコードを削除して以下のように書き換えます:
import React from 'react';
function App() {
return (
<div>
<h1>初めてのReactアプリケーション</h1>
<p>Reactを使って簡単なアプリを作成しています。</p>
</div>
);
}
export default App;
このコードでは、Reactを使ってシンプルなUIを構築しています。
2. ファイルを保存
変更を保存すると、ブラウザが自動で更新され、新しいUIが表示されます。
開発を効率化するヒント
1. ホットリロード
Reactでは、コードを保存するたびにブラウザが自動更新されます。これをホットリロードと呼び、開発効率を大幅に向上させます。
2. コンソールでのエラーメッセージ
ブラウザの開発者ツールでエラーが表示される場合、指示に従ってコードを修正してください。
完成したアプリケーション
上記の手順を終えると、http://localhost:3000
には以下のようなシンプルなアプリが表示されます:
- タイトル: 「初めてのReactアプリケーション」
- 説明: 「Reactを使って簡単なアプリを作成しています。」
これでReactプロジェクトの基本的な作成が完了しました。次はJSXについて詳しく学び、より複雑なUIを構築していきましょう。
JSXの基本と構文
ReactでUIを構築する際に使用される独自の構文がJSXです。JSXはJavaScriptの拡張構文で、HTMLに似た記述方法が特徴です。ここでは、JSXの基本的な使い方と構文を学びます。
JSXとは何か
JSX(JavaScript XML)は、JavaScript内でHTMLに似た構文を記述するためのツールです。これにより、UIを直感的に構築できます。
JSXの例
以下は、JSXで簡単なボタンを記述した例です:
const button = <button>クリックしてください</button>;
このコードは、JavaScriptの内部でHTMLのような要素を直接記述していますが、Reactがそれを解釈して仮想DOMに変換します。
JSXの基本構文
1. タグは単一のルート要素が必要
JSXでは、複数のタグを返す場合、1つのルート要素で囲む必要があります。例えば、以下のコードはエラーになります:
return (
<h1>タイトル</h1>
<p>説明文</p>
);
正しい記述:
return (
<div>
<h1>タイトル</h1>
<p>説明文</p>
</div>
);
2. クラス属性は「className」と記述
HTMLではclass
属性を使用しますが、JSXではclassName
を使用します:
<div className="container">内容</div>
3. JavaScriptの埋め込み
JSX内でJavaScriptの式を埋め込むには、{}
で囲みます:
const name = "React";
return <h1>ようこそ、{name}!</h1>;
4. 属性の値にJavaScript式を使用
属性の値に変数や計算式を挿入することも可能です:
const isDisabled = true;
return <button disabled={isDisabled}>クリック</button>;
JSXの注意点
1. 自己閉じタグ
JSXでは内容を持たない要素(例えば<img>
や<input>
)は、自己閉じタグとして記述する必要があります:
<img src="image.jpg" alt="画像" />
2. コメントの記述
JSX内ではJavaScriptのように//
は使えません。代わりに以下の形式で記述します:
{/* これはコメントです */}
JSXを使用する利点
- 直感的な構文: HTMLに似た構文で、初心者にも分かりやすい。
- 動的UIの構築が容易: JavaScript式と組み合わせることで柔軟なUIを作成可能。
- エラー検出: JavaScriptとして解析されるため、構文エラーを簡単に発見できる。
実践: 簡単なアプリの作成
以下のコードを試して、JSXの基本を確認しましょう:
function App() {
const userName = "React学習者";
return (
<div>
<h1>こんにちは、{userName}!</h1>
<p>JSXを使ってUIを構築しています。</p>
</div>
);
}
export default App;
ブラウザには「こんにちは、React学習者!」と表示されるはずです。JSXの理解が深まったら、次はコンポーネントの作成に進みましょう。
コンポーネントの作成
Reactの基礎はコンポーネントにあります。コンポーネントとは、再利用可能で独立したUI部品のことを指します。ここでは、Reactでのコンポーネントの作成方法と使用方法を学びます。
コンポーネントの種類
Reactには主に以下の2種類のコンポーネントがあります:
1. 関数コンポーネント
関数として定義され、簡潔で軽量です。現在のReactでは主にこの形式が推奨されています。
function Greeting() {
return <h1>こんにちは、React!</h1>;
}
2. クラスコンポーネント
クラスとして定義されます。以前は状態を持つコンポーネントで一般的でしたが、現在はHooksを使うことで関数コンポーネントでも同様の機能が実現できます。
import React, { Component } from 'react';
class Greeting extends Component {
render() {
return <h1>こんにちは、React!</h1>;
}
}
関数コンポーネントの作成
1. 基本構造
以下のように関数を定義し、return
でJSXを返します:
function Welcome() {
return (
<div>
<h1>初めてのコンポーネント</h1>
<p>Reactのコンポーネントを作成しています。</p>
</div>
);
}
2. コンポーネントの使用
作成したコンポーネントを他のコンポーネント内で使用します:
function App() {
return (
<div>
<Welcome />
</div>
);
}
コンポーネントの分割と再利用
コンポーネントは再利用性を高めるために小さく分割するのがベストプラクティスです。
例:ボタンコンポーネントを分割する
function Button({ label }) {
return <button>{label}</button>;
}
function App() {
return (
<div>
<Button label="クリック" />
<Button label="送信" />
</div>
);
}
Propsを使用してデータを渡す
コンポーネント間でデータを渡すにはPropsを使用します。
Propsの例
function Greeting({ name }) {
return <h1>こんにちは、{name}さん!</h1>;
}
function App() {
return <Greeting name="React学習者" />;
}
この場合、Greeting
コンポーネントはname
というプロパティを受け取り、それを表示します。
コンポーネントの利点
- 再利用性: 同じコンポーネントを複数回利用可能。
- コードの見通し向上: 大規模なアプリケーションでもコードが整理されやすい。
- 変更の簡便化: 一部のコンポーネントを修正するだけで全体に反映される。
実践例: カードコンポーネント
以下は、単純なカードを表示するコンポーネントの例です:
function Card({ title, content }) {
return (
<div className="card">
<h2>{title}</h2>
<p>{content}</p>
</div>
);
}
function App() {
return (
<div>
<Card title="Reactの特徴" content="コンポーネントベースで柔軟です。" />
<Card title="再利用性" content="コンポーネントを再利用して効率的に開発できます。" />
</div>
);
}
これにより、Reactでのコンポーネントの基本が理解できます。次は、状態管理に重要なPropsとStateの違いについて学びましょう。
PropsとStateの違い
Reactでは、データの管理と更新がアプリケーションの動作に大きく関わります。その中核を成す概念がProps(プロパティ)とState(状態)です。それぞれの役割や違いを理解することで、より効率的にアプリケーションを構築できます。
Propsとは何か
Propsは、コンポーネント間でデータを渡すための手段です。一方通行のデータフローを持ち、親コンポーネントから子コンポーネントへデータを伝達します。
Propsの特徴
- 読み取り専用: 子コンポーネント内でPropsの値を変更することはできません。
- 柔軟なデータ受け渡し: 任意のデータ型(文字列、数値、オブジェクトなど)を渡すことができます。
Propsの例
function Greeting({ name }) {
return <h1>こんにちは、{name}さん!</h1>;
}
function App() {
return <Greeting name="React学習者" />;
}
上記では、name
がPropsとしてGreeting
コンポーネントに渡されます。
Stateとは何か
Stateは、コンポーネント内で管理されるデータです。ユーザーの操作やアプリケーション内のイベントに応じて、動的に変更されます。
Stateの特徴
- コンポーネント内でのみ管理: Stateはそのコンポーネントに限定されており、他のコンポーネントから直接アクセスすることはできません。
- 変更可能: StateはReactの
useState
フックを使用して更新されます。
Stateの例
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>現在のカウント: {count}</p>
<button onClick={() => setCount(count + 1)}>カウントアップ</button>
</div>
);
}
function App() {
return <Counter />;
}
上記では、count
がStateとして管理され、setCount
関数を使って変更されています。
PropsとStateの主な違い
特徴 | Props | State |
---|---|---|
用途 | データの受け渡し | 動的データの管理 |
変更可能性 | 読み取り専用(親からのみ変更可能) | コンポーネント内で変更可能 |
責任範囲 | 親コンポーネントから渡される | コンポーネント内で完結 |
データの流れ | 一方向(親から子へ) | 内部またはイベントに応じて変更 |
PropsとStateを併用する例
以下の例では、Propsで初期値を渡し、Stateでその値を更新しています:
function Greeting({ initialName }) {
const [name, setName] = useState(initialName);
return (
<div>
<p>こんにちは、{name}さん!</p>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
/>
</div>
);
}
function App() {
return <Greeting initialName="React学習者" />;
}
ここでは、Propsとして渡されたinitialName
を基に、Stateで動的に名前を変更できるようにしています。
まとめ
- Propsは親から子へデータを渡すための手段。読み取り専用であり変更できません。
- Stateはコンポーネント内でデータを管理するために使用され、ユーザーの操作やイベントに応じて変更可能です。
これらを適切に組み合わせることで、効率的で直感的なReactアプリケーションを構築できます。次は、ユーザー操作を処理するイベントハンドリングについて学びましょう。
イベントハンドリング
Reactでは、ユーザー操作(クリックや入力など)に対して動作を定義するために、イベントハンドリングを使用します。ここでは、Reactでイベントを扱う基本的な方法と、その具体例を説明します。
Reactでのイベントの基本
Reactのイベントは、JavaScriptの標準イベントと似ていますが、以下の違いがあります:
1. キャメルケースの記法
Reactのイベントハンドラーは、通常のHTMLのイベントと異なりキャメルケース(onClick
、onChange
など)で記述します。
2. JavaScript関数を使用
Reactでは、イベントハンドラーにJavaScript関数を直接渡します。
例:ボタンクリックイベント
以下は、ボタンがクリックされたときにアラートを表示する簡単な例です:
function handleClick() {
alert('ボタンがクリックされました!');
}
function App() {
return (
<button onClick={handleClick}>クリック</button>
);
}
イベントハンドリングの実装方法
1. 関数の直接記述
イベントハンドラーに関数を直接記述することもできます:
function App() {
return (
<button onClick={() => alert('ボタンがクリックされました!')}>クリック</button>
);
}
2. Stateを使用したイベント処理
ユーザー操作に応じて画面を動的に更新するには、useState
フックを使用します:
import React, { useState } from 'react';
function App() {
const [count, setCount] = useState(0);
return (
<div>
<p>現在のカウント: {count}</p>
<button onClick={() => setCount(count + 1)}>カウントアップ</button>
</div>
);
}
この例では、ボタンをクリックするたびにcount
の値が増加し、画面が更新されます。
3. フォームの入力イベント
フォームの入力値をリアルタイムで取得する例です:
import React, { useState } from 'react';
function App() {
const [text, setText] = useState('');
const handleChange = (event) => {
setText(event.target.value);
};
return (
<div>
<input type="text" value={text} onChange={handleChange} />
<p>入力されたテキスト: {text}</p>
</div>
);
}
onChange
イベントを使用して、テキストボックスの値をtext
に反映しています。
イベントオブジェクトの活用
Reactのイベントハンドラーでは、イベントオブジェクトを利用して、操作された要素やイベントの詳細を取得できます:
function App() {
const handleClick = (event) => {
console.log(event.target); // クリックされた要素
};
return <button onClick={handleClick}>要素を確認</button>;
}
イベントのデフォルト動作の防止
フォーム送信やリンククリックなどのデフォルト動作を防ぐには、preventDefault
を使用します:
function App() {
const handleSubmit = (event) => {
event.preventDefault();
alert('フォームが送信されました!');
};
return (
<form onSubmit={handleSubmit}>
<button type="submit">送信</button>
</form>
);
}
よく使うイベント一覧
Reactでよく使用するイベントの一覧です:
onClick
: 要素がクリックされたときonChange
: 入力値が変更されたときonSubmit
: フォームが送信されたときonMouseOver
: マウスが要素に乗ったときonKeyDown
: キーが押されたとき
まとめ
Reactのイベントハンドリングは、ユーザー操作に対して動的に動作を定義するための重要な仕組みです。
- JavaScriptの関数をイベントハンドラーとして利用する。
useState
と組み合わせて動的なUIを構築する。- イベントオブジェクトを使用して詳細な操作情報を取得する。
これらを活用して、インタラクティブなReactアプリケーションを構築してみましょう。次は、スタイリングの方法について学びます。
Reactでのスタイリング方法
Reactでは、CSSを使用してコンポーネントをスタイリングできます。基本的なCSSからモジュール化されたCSS、インラインスタイル、さらにはCSS-in-JSライブラリまで、多様な方法があります。それぞれの特徴と実装方法を見ていきましょう。
1. 通常のCSSを使用する方法
Reactでは、従来のCSSファイルを使用してスタイリングできます。
例: 外部CSSファイルの適用
- CSSファイルを作成します(例:
App.css
):
/* App.css */
.container {
background-color: #f0f0f0;
padding: 20px;
text-align: center;
}
- コンポーネントでCSSファイルをインポートします:
import './App.css';
function App() {
return <div className="container">Reactでスタイリング</div>;
}
export default App;
CSSファイルで定義したクラスを、className
プロパティで指定します。
2. CSSモジュールを使用する方法
CSSモジュールを使うと、CSSクラスがコンポーネントごとにスコープされるため、クラス名の競合を防ぐことができます。
例: CSSモジュールの適用
- CSSモジュールファイルを作成します(例:
App.module.css
):
/* App.module.css */
.container {
background-color: #dff9fb;
padding: 20px;
border-radius: 10px;
}
- コンポーネントでCSSモジュールをインポートします:
import styles from './App.module.css';
function App() {
return <div className={styles.container}>CSSモジュールでスタイリング</div>;
}
export default App;
CSSモジュールのクラス名を使用する際は、styles.container
のようにオブジェクト形式で参照します。
3. インラインスタイル
Reactでは、JavaScriptオブジェクトを用いたインラインスタイルも利用できます。
例: インラインスタイルの適用
function App() {
const style = {
backgroundColor: '#ff7979',
padding: '20px',
textAlign: 'center',
borderRadius: '10px',
color: 'white',
};
return <div style={style}>インラインスタイルでスタイリング</div>;
}
export default App;
- インラインスタイルでは、CSSプロパティ名をキャメルケースで記述します(例:
background-color
→backgroundColor
)。
4. CSS-in-JSライブラリを使用
CSS-in-JSは、JavaScriptコード内でスタイリングを記述する方法で、styled-components
などのライブラリを使います。
例: Styled Componentsの使用
- ライブラリをインストールします:
npm install styled-components
- スタイル付きのコンポーネントを作成します:
import styled from 'styled-components';
const Container = styled.div`
background-color: #6c5ce7;
padding: 20px;
text-align: center;
border-radius: 10px;
color: white;
`;
function App() {
return <Container>CSS-in-JSでスタイリング</Container>;
}
export default App;
この方法では、スタイルをコンポーネントと密接に結び付けることができ、保守性が向上します。
5. グローバルCSSの適用
Reactアプリ全体で使用するグローバルなCSSを定義する場合は、public/index.html
で直接CSSを読み込むことも可能です。
例: グローバルCSSの読み込み
index.html
に以下を追加します:
<link rel="stylesheet" href="styles/global.css">
これにより、Reactアプリ全体にCSSが適用されます。
6. コンポーネントに応じたスタイルの適用
複数のスタイルを条件に応じて適用する場合、以下のように実装できます:
function App() {
const isActive = true;
return (
<div className={isActive ? 'active' : 'inactive'}>
条件に応じたスタイルの適用
</div>
);
}
まとめ
Reactでのスタイリングには多様な方法があります:
- 通常のCSSやCSSモジュールで簡単に管理可能。
- インラインスタイルやCSS-in-JSで柔軟性を高められる。
- プロジェクトに応じて適切な方法を選択することが重要です。
次は、開発中に直面する問題の解決方法について学ぶデバッグとトラブルシューティングの章に進みます。
デバッグとトラブルシューティング
React開発では、エラーや予期しない動作に遭遇することがよくあります。その際、効率的に問題を解決するためのデバッグ方法と一般的なトラブルシューティングの手法を紹介します。
Reactでの一般的なエラーと解決方法
1. JSXシンタックスエラー
エラー例:
return (
<div>
<h1>タイトル</h1>
<p>説明文</p>
</div>
);
このコードに余分な閉じタグがある場合、以下のエラーが表示されます:Syntax error: Unexpected token
解決方法:
- JSXタグが正しく閉じられているか確認します。
- 内容のないタグは自己閉じ形式にします(例:
<img />
)。
2. `useState`や`useEffect`の使用エラー
エラー例:React Hook "useState" cannot be called in a class component.
解決方法:
- React Hooksは関数コンポーネントでのみ使用できます。クラスコンポーネントでは
state
を使う形に変更します。
デバッグツールの活用
1. React Developer Tools
React専用の開発者ツールを使用して、コンポーネントの構造やProps、Stateをリアルタイムで確認できます。
- インストール方法:
ChromeやFirefoxの拡張機能として「React Developer Tools」をインストールします。 - 使用方法:
ブラウザの開発者ツールに「Components」タブが追加され、コンポーネントの状態やPropsを確認できます。
2. コンソールログ
JavaScriptのconsole.log()
を使用してデバッグするのはシンプルかつ有効な方法です。
例:
const [count, setCount] = useState(0);
useEffect(() => {
console.log(`現在のカウント: ${count}`);
}, [count]);
3. エラー境界の利用
Reactでは、エラー境界を使ってアプリケーション内のエラーをキャッチし、フォールバックUIを提供できます。
例:
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error, info) {
console.error("エラーキャッチ: ", error, info);
}
render() {
if (this.state.hasError) {
return <h1>エラーが発生しました。</h1>;
}
return this.props.children;
}
}
function App() {
return (
<ErrorBoundary>
<ChildComponent />
</ErrorBoundary>
);
}
一般的なトラブルシューティング
1. コンポーネントが表示されない
原因:
- コンポーネントの名前が大文字で始まっていない。
- インポート忘れやファイルパスの間違い。
解決方法:
- Reactのコンポーネント名は大文字で始める必要があります。
- インポート文を確認します。
2. Stateが更新されない
原因:
- Stateを直接変更している。
- 関数の呼び出し忘れ。
解決方法:
useState
の更新関数(例:setState
)を使用してStateを変更します。
パフォーマンスの問題解決
- 不要な再レンダリング:
React.memo
やuseMemo
を使用して再レンダリングを防ぎます。
例:
import React, { memo } from 'react';
const MemoizedComponent = memo(function Component({ value }) {
return <div>{value}</div>;
});
まとめ
React開発で問題に直面したときは、以下を活用して効率的に解決しましょう:
- React Developer Toolsやコンソールログを使用する。
- エラー境界でエラーをキャッチする。
- パフォーマンス改善ツールやメモ化を活用する。
次に進む際は、応用例や練習問題に取り組み、さらにReactのスキルを深めましょう。
応用例と練習問題
Reactの基本を学んだ後は、実際に応用例を試し、練習問題に取り組むことで理解を深めましょう。ここでは、初心者でも取り組みやすいアプリケーション例と課題を紹介します。
応用例: シンプルなToDoアプリ
機能
- タスクの追加
- タスクの削除
- タスクの完了状態の切り替え
コード例
以下のコードを試して、Reactの実践的な活用方法を学びましょう:
import React, { useState } from 'react';
function ToDoApp() {
const [tasks, setTasks] = useState([]);
const [newTask, setNewTask] = useState('');
const addTask = () => {
if (newTask.trim()) {
setTasks([...tasks, { text: newTask, completed: false }]);
setNewTask('');
}
};
const toggleTask = (index) => {
const updatedTasks = tasks.map((task, i) =>
i === index ? { ...task, completed: !task.completed } : task
);
setTasks(updatedTasks);
};
const deleteTask = (index) => {
const updatedTasks = tasks.filter((_, i) => i !== index);
setTasks(updatedTasks);
};
return (
<div>
<h1>ToDoアプリ</h1>
<input
type="text"
value={newTask}
onChange={(e) => setNewTask(e.target.value)}
placeholder="新しいタスクを入力"
/>
<button onClick={addTask}>追加</button>
<ul>
{tasks.map((task, index) => (
<li key={index}>
<span
style={{
textDecoration: task.completed ? 'line-through' : 'none',
}}
onClick={() => toggleTask(index)}
>
{task.text}
</span>
<button onClick={() => deleteTask(index)}>削除</button>
</li>
))}
</ul>
</div>
);
}
export default ToDoApp;
このコードのポイント
- State管理: タスク一覧や入力フィールドの内容をStateで管理しています。
- イベントハンドリング: ボタンのクリックやタスクのクリックで機能が実行されます。
- 動的リスト:
map()
を使用して、タスクごとにリストアイテムを生成しています。
練習問題
以下の課題に取り組んで、Reactのスキルを実践で試してみましょう。
1. カウンター機能を追加する
ToDoアプリに、現在のタスク数を表示するカウンター機能を追加してください。
ヒント: タスクの配列の長さをtasks.length
で取得できます。
2. フィルター機能を実装する
タスクを「すべて表示」「完了のみ表示」「未完了のみ表示」に切り替えるフィルター機能を追加してください。
ヒント: filter()
を使用して条件に応じたタスクを表示します。
3. 編集機能を追加する
既存のタスクをクリックすると編集できるようにしてください。
ヒント: タスクのインデックスを利用して特定のタスクを編集します。
4. ダークモードの切り替え機能を追加する
ボタンを押すと、アプリ全体のテーマを「ライトモード」と「ダークモード」に切り替えられるようにしてください。
ヒント: テーマをStateで管理し、CSSクラスを動的に変更します。
さらなる応用: APIとの連携
外部APIを使用してデータを取得するアプリを作成してみましょう。以下は、fetch
を使ったデータ取得の例です:
import React, { useEffect, useState } from 'react';
function FetchDataApp() {
const [data, setData] = useState([]);
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/posts')
.then((response) => response.json())
.then((data) => setData(data));
}, []);
return (
<div>
<h1>データ取得アプリ</h1>
<ul>
{data.map((item) => (
<li key={item.id}>{item.title}</li>
))}
</ul>
</div>
);
}
export default FetchDataApp;
まとめ
応用例や練習問題を通じて、以下を実践してみましょう:
- StateとPropsの理解: 動的なデータを管理し、アプリを操作可能にする。
- イベントハンドリング: ユーザー操作に応じて適切な動作を実行する。
- データの取得と表示: 外部APIを使ったデータの取得とリスト表示を試す。
これらの演習を終えれば、Reactアプリケーションの作成スキルが大幅に向上するでしょう。次は、記事全体のまとめに進みます。
まとめ
本記事では、Reactを初めて学ぶ人向けに、基本的な導入手順から応用例までを徹底的に解説しました。Reactの特徴であるコンポーネントベースの設計や仮想DOMの仕組み、JSXの基本構文、PropsとStateの使い方、イベントハンドリング、そしてスタイリング方法までを順序立てて学びました。
さらに、応用例としてToDoアプリの作成や練習問題を通じて、Reactの実践的な使い方を習得するステップを示しました。これらをマスターすることで、インタラクティブでスケーラブルなアプリケーションの構築に必要なスキルを得ることができます。
ReactはWeb開発の強力なツールであり、継続的な学習と実践が重要です。この記事をガイドに、ぜひ次のステップとして、さらに高度なReactの機能やライブラリ(React Router、Reduxなど)にも挑戦してみてください。
コメント