Reactは、ユーザーインターフェース(UI)の構築に特化した人気のJavaScriptライブラリです。Reactを使用する際に頻繁に使用される重要な概念や用語について、完全かつ包括的に説明します。
1. コンポーネント (Component)
Reactの中心となる概念は「コンポーネント」です。コンポーネントは、UIの再利用可能な部分を定義するための基本的な単位です。コンポーネントはJavaScript関数またはクラスとして定義され、UIの状態やロジックをカプセル化します。コンポーネントには以下の2種類があります。

-
関数型コンポーネント(Functional Component): 単純な関数として定義されるコンポーネント。React Hooksを使用することで状態管理や副作用の処理が可能になります。
-
クラス型コンポーネント(Class Component): クラスを使って定義されるコンポーネント。従来のReactで多く使用されていましたが、最近では関数型コンポーネントが主流です。
2. JSX
JSX(JavaScript XML)は、ReactでUIを定義するためのシンタックスです。HTMLのような構文をJavaScriptの中に埋め込むことができ、視覚的にわかりやすくコードを記述することができます。JSXはブラウザにはそのままでは実行できないため、Reactが内部でそれをJavaScriptに変換して実行します。
jsxconst element = <h1>Hello, world!h1>;
3. Props
Props(プロパティ)は、コンポーネント間でデータを渡すための手段です。親コンポーネントから子コンポーネントに値を渡す際に使用します。Propsは読み取り専用で、子コンポーネント内では変更できません。
jsxfunction Welcome(props) {
return <h1>Hello, {props.name}h1>;
}
<Welcome name="Sara" />;
4. State
State(状態)は、コンポーネント内で管理される動的なデータを指します。Stateは、コンポーネントがどのように見えるか、またはどのように振る舞うかを決定します。Stateの変更は、Reactがコンポーネントの再描画をトリガーする原因となります。
jsxclass Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
return (
<div>
<p>{this.state.count}p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>Increasebutton>
div>
);
}
}
5. イベントハンドラー (Event Handlers)
Reactでは、ユーザーのアクション(クリック、入力など)に応じて動作を指定するためにイベントハンドラーを使用します。イベントハンドラーは通常、onClick
やonChange
などの形で記述されます。
jsxfunction MyButton() {
const handleClick = () => {
alert("Button clicked!");
};
return <button onClick={handleClick}>Click mebutton>;
}
6. ライフサイクルメソッド (Lifecycle Methods)
Reactコンポーネントには、特定のタイミングで呼び出されるライフサイクルメソッドがあります。これらはコンポーネントが生成されるとき、更新されるとき、削除されるときに実行されます。主にクラス型コンポーネントで使用されますが、Reactのフック(useEffect
)で同様の機能を実現することもできます。
-
componentDidMount()
: コンポーネントが初めてレンダリングされた後に呼ばれます。 -
componentDidUpdate()
: コンポーネントが更新された後に呼ばれます。 -
componentWillUnmount()
: コンポーネントが削除される前に呼ばれます。
7. フック (Hooks)
フックは、Reactの関数型コンポーネントに状態や副作用を追加するための新しいAPIです。主に以下のものがあります:
-
useState()
: コンポーネントの状態を管理します。 -
useEffect()
: 副作用(API呼び出し、タイマーなど)を処理します。 -
useContext()
: コンテキストAPIを使用してコンポーネントツリー全体にデータを提供します。
jsximport React, { useState, useEffect } from 'react';
function Timer() {
const [seconds, setSeconds] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setSeconds(prevSeconds => prevSeconds + 1);
}, 1000);
return () => clearInterval(interval);
}, []);
return <div>Time: {seconds} secondsdiv>;
}
8. コンテキスト (Context)
コンテキストは、コンポーネントツリー全体でデータを共有するための仕組みです。通常、親から子へPropsを使ってデータを渡しますが、コンテキストを使用することで、より深い階層にあるコンポーネントに直接データを提供することができます。
jsxconst ThemeContext = React.createContext('light');
function App() {
return (
<ThemeContext.Provider value="dark">
<Toolbar />
ThemeContext.Provider>
);
}
function Toolbar() {
return <ThemedButton />;
}
function ThemedButton() {
const theme = React.useContext(ThemeContext);
return <button className={theme}>Themed Buttonbutton>;
}
9. リファレンス (Refs)
Refsは、Reactコンポーネント内のDOM要素や他のコンポーネントに直接アクセスするために使用されます。useRef
フック(関数型コンポーネント)やReact.createRef()
(クラス型コンポーネント)を使って参照を作成し、アクセスできます。
jsxfunction FocusInput() {
const inputRef = React.useRef();
const handleClick = () => {
inputRef.current.focus();
};
return (
<div>
<input ref={inputRef} />
<button onClick={handleClick}>Focus the inputbutton>
div>
);
}
10. 条件付きレンダリング (Conditional Rendering)
条件付きレンダリングは、特定の条件に基づいてUIを動的に変更するために使用されます。通常、JavaScriptの条件分岐を使って実装します。
jsxfunction Greeting(props) {
if (props.isLoggedIn) {
return <h1>Welcome back!h1>;
} else {
return <h1>Please sign up.h1>;
}
}
11. エラーバウンダリー (Error Boundaries)
エラーバウンダリーは、Reactコンポーネント内で発生したJavaScriptエラーをキャッチし、アプリケーションのクラッシュを防ぐための仕組みです。通常、クラス型コンポーネントで使用されます。
jsxclass ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
return { hasError: true };
}
componentDidCatch(error, info) {
console.error(error, info);
}
render() {
if (this.state.hasError) {
return <h1>Something went wrong.h1>;
}
return this.props.children;
}
}
12. 高階コンポーネント (HOC: Higher Order Component)
高階コンポーネントは、他のコンポーネントを引数に取り、新しい機能を追加したコンポーネントを返す関数です。これにより、コードの再利用性を高め、コンポーネントのロジックを分離できます。
jsxfunction withLoading(Component) {
return function WithLoadingComponent({ isLoading, ...props }) {
if (isLoading) {
return <div>Loading...div>;
}
return <Component {...props} />;
};
}
結論
Reactは、コンポーネントベースのアーキテクチャを持ち、状態管理、ライフサイクル、イベント処理など多くの強力な概念を提供します。これらの概念を理解することは、効率的でメンテナンス性の高いReactアプリケーションを作成するために不可欠です。Reactの学習を進める上で、これらの用語と概念をしっかりと理解し、実際にプロジェクトで活用することが大切です。