概要:このチュートリアルでは、if文、論理AND演算子(&&)、論理OR演算子(||)を使用して、JSX要素を条件付きでレンダリングする方法を学びます。
条件に基づいて異なるJSX要素を表示したい場合があります。そのためには、以下の3つの手法のいずれかを使用できます。
各手法を実証するために、簡単なReactアプリケーションを作成します。
Reactアプリの作成
まず、ターミナルを開き、npx create-react-app
コマンドを実行して新しいReactアプリを作成します。
npx create-react-app todo
Code language: plaintext (plaintext)
次に、src
ディレクトリ内のすべてのファイルを削除します。
次に、src
ディレクトリにindex.js
ファイルを作成します。index.js
ファイルは画面にApp
コンポーネントをレンダリングします。
import ReactDOM from 'react-dom/client';
import App from './App.js';
const el = document.querySelector('#root');
const root = ReactDOM.createRoot(el);
root.render(<App />);
Code language: JavaScript (javascript)
次に、AppコンポーネントをホストするApp.js
をsrcディレクトリに作成します。
import TodoList from './TodoList';
const App = () => {
const todos = [
{ id: 1, title: 'Learn React', completed: true },
{ id: 2, title: 'Build an app', completed: false },
{ id: 3, title: 'Deploy the app', completed: false },
];
return (
<main>
<h1>Todo List</h1>
<TodoList todos={todos} />
</main>
);
};
export default App;
Code language: JavaScript (javascript)
App
コンポーネントは、todoオブジェクトの配列をTodoList
コンポーネントに渡します。
最後に、TodoList
コンポーネントを格納するTodoList.js
ファイルを作成します。
const TodoList = ({ todos }) => {
const renderedTodos = todos.map((todo) => {
return <div key={todo.id}>{todo.title}</div>;
});
return <section>{renderedTodos}</section>;
};
export default TodoList;
Code language: JavaScript (javascript)
TodoList
コンポーネントは、todo配列のデータをdiv要素にレンダリングします。
出力は次のとおりです。

完了したtodoにチェックを入れるには、上記の手法のいずれかを使用して、完了したtodoをそれぞれレンダリングできます。
if文を使用した条件付きレンダリング
以下は、各todoオブジェクトのcompleted
プロパティに基づいて異なるJSX要素を返すif
文を使用しています。
const TodoList = ({ todos }) => {
const renderedTodos = todos.map(({ id, title, completed }) => {
if (completed) {
return <div key={id}>✔ {title}</div>;
}
return <div key={id}>{title}</div>;
});
return <section>{renderedTodos}</section>;
};
export default TodoList;
Code language: JavaScript (javascript)
出力

あるいは、コードをより簡潔にするために三項演算子(?:
)を使用できます。
const TodoList = ({ todos }) => {
const renderedTodos = todos.map(({id, title, completed}) => {
return (
<div key={id}>
{completed ? '✔' : ''}
{title}
</div>
);
});
return <section>{renderedTodos}</section>;
};
export default TodoList;
Code language: JavaScript (javascript)
この例では、次の式をJSX内で直接使用しています。
{todo.completed ? '✔' : ''}
Code language: JavaScript (javascript)
completed
がtrue
の場合、式はチェックマークを返し、それ以外の場合は空文字列を返します。
論理AND演算子を使用した条件付きレンダリング
論理AND演算子を使用すると、最初の偽の値または最後の真の値を返すことができます。
const result = value1 && value2;
Code language: JavaScript (javascript)
この機能を使用して、JSXで要素を条件付きでレンダリングできます。
const TodoList = ({ todos }) => {
const renderedTodos = todos.map((todo) => {
return (
<div key={todo.id}>
{todo.completed && '✔'}
{todo.title}
</div>
);
});
return <section>{renderedTodos}</section>;
};
export default TodoList;
Code language: JavaScript (javascript)
この例では、completed
がfalse
の場合、式は最初の偽の値であるfalseを返します。その結果、JSXはブール値(true
とfalse
)をレンダリングしないため、Reactは空文字列を表示します。
completed
がtrue
の場合、式は最後の真の値である'✔'を返します。したがって、Reactは完了したtodoに対して'✔'をレンダリングします。
論理||演算子を使用した条件付きレンダリング
論理OR演算子(||)は、最初の真の値または最後の偽の値を返します。
const result = value1 || value2;
Code language: JavaScript (javascript)
未完了のtodoの前に文字'✖'を表示したいとします。そのためには、論理OR演算子(||)を使用できます。
{todo.completed || '✖'}
Code language: JavaScript (javascript)
completed
がtrueの場合、またはcompleted
がfalseの場合に文字'✖'を返す式です。
const TodoList = ({ todos }) => {
const renderedTodos = todos.map(({ id, title, completed }) => {
return (
<div key={id}>
{completed && '✔'}
{completed || '✖'}
{title}
</div>
);
});
return <section>{renderedTodos}</section>;
};
export default TodoList;
Code language: JavaScript (javascript)
出力

まとめ
- 条件に基づいて異なるJSX要素を返すには、if文を使用します。
- JSX内で要素を条件付きでレンダリングするには、三項演算子、論理AND演算子、論理OR演算子を使用します。