0Pricing
React Academy · レッスン

React.Childrenユーティリティ

React.Children.map、count、toArrayを使ってchildrenを安全に操作します

「React.Childrenユーティリティ」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

ようこそ

このレッスンでは、React.Childrenのユーティリティであるmap、count、toArray、forEachを使って、渡された子要素の数に関係なく安全に反復処理や変換を行います。

配列メソッドを直接使う場合の問題

`props.children` には単一の要素、配列、undefinedのいずれかが入る可能性があるため、直接 `.map()` を呼び出すとクラッシュします。React.Childrenのユーティリティを使えば、これらすべてのケースを安全に処理できます。
// Unsafe — crashes if children is a single element
children.map(c => ...);

// Safe
React.Children.map(children, c => ...);

React.Children.map

`Array.prototype.map` と同じように動作しますが、単一の子要素、複数の子要素、null/undefinedを安全に処理します。複製された要素の配列(またはコールバックが返す値の配列)を返します。
function List({ children }) {
  return (
    <ul>
      {React.Children.map(children, (child, i) => (
        <li key={i}>{child}</li>
      ))}
    </ul>
  );
}

React.Children.count

`React.Children.count(children)` は子要素の数を返します。単一の要素を1として正しく数え、null/undefinedは0として扱います。
function RequiresTwo({ children }) {
  if (React.Children.count(children) !== 2) {
    throw new Error('Exactly two children required');
  }
  return <div>{children}</div>;
}

React.Children.toArray

子要素を、安定したキーを持つ平坦な配列に変換します。これにより、入れ子構造を気にせず、通常の配列メソッドで子要素を並べ替えたり、絞り込んだり、切り出したりできます。
function Reversed({ children }) {
  const arr = React.Children.toArray(children);
  return <>{arr.reverse()}</>;
}

React.Children.forEach

`.map()` に似ていますが、値は返しません。子要素の型を検証したり検索用のデータを構築したりするなど、副作用のために子要素を反復処理したい場合に使います。
React.Children.forEach(children, child => {
  if (!React.isValidElement(child)) {
    console.warn('Non-element child found');
  }
});

React.Children.only

`React.Children.only(children)` は、子要素がちょうど1つのReact要素であることを検証し、その要素を返します。子要素が0個または2個以上の場合はエラーを投げます。単一の子要素を受け取るAPIを強制したい場合に便利です。
function SingleChild({ children }) {
  const child = React.Children.only(children);
  return React.cloneElement(child, { 'data-wrapped': true });
}

子要素の型を検証する

`React.Children.forEach` と `React.isValidElement` を子要素の型と組み合わせることで、特定のコンポーネント型だけを子要素として渡せるように制限できます。
React.Children.forEach(children, child => {
  if (child.type !== TabPanel) {
    throw new Error('Only TabPanel children allowed');
  }
});

React.ChildrenとArray.fromの比較

React 18以降では、子要素が通常の配列ではないReact要素ツリーになる場合があります。単一の要素やフラグメントに関するエッジケースを避けるため、常にArray.fromよりReact.Childrenを優先してください。

現代的な代替手段: toArrayで平坦化

複雑な変換が必要な場合は、まず `React.Children.toArray(children)` を呼び出して、キー付きの平坦な配列を取得します。その後、その配列に通常の配列メソッドを適用します。
const items = React.Children.toArray(children);
const first = items[0];
const rest = items.slice(1);

確認問題

Array.mapのように、単一の要素、配列、null/undefinedの子要素を安全に処理できるReact.Childrenのメソッドはどれですか?

復習

安全な反復処理にはReact.Children.map、個数の確認にはcount、配列メソッドの利用にはtoArray、副作用を伴う反復処理にはforEach、子要素がちょうど1つであることの検証にはonlyを使います。

次のレッスン

次のレッスン: **オブジェクトプロパティによる名前付きスロット** — 名前付きプロパティを通してJSXを渡し、header、body、footerのスロットを実装します。

よくある質問

「React.Childrenユーティリティ」レッスンは無料ですか?

はい。「React.Childrenユーティリティ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「React.Childrenユーティリティ」で何を学びますか?

React.Children.map、count、toArrayを使ってchildrenを安全に操作します ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「React.Childrenユーティリティ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. props.childrenの基礎
  2. React.Childrenユーティリティ
  3. Object Propsによる名前付きスロット
  4. cloneElementでPropsを複製・注入する
← React Academyに戻る