📘

【React】map関数を使用して画面に表示する

に公開

map関数を使用してJSXを画面に表示する際に沼にハマったので備忘録としてメモに残す。

誤りのコード

type Books = {
    src: Book[];
}

type Book = {
    isbn: string,
    title: string,
    price: number
}

export default function ForList({src}: Books) {
    return (
        <dl>
            {
                src.map((elem: Book) => {  // この{}が誤りの部分
                    <>
                        <dt>
                            <p>{elem.title}({elem.price})</p>
                        </dt>
                    </>
                })
            }

        </dl>
    )
}

正しいコード

type Books = {
    src: Book[];
}

type Book = {
    isbn: string,
    title: string,
    price: number
}

export default function ForList({src}: Books) {
    return (
        <dl>
            {
                src.map((elem: Book) => {  // {}ではなく()
                    <>
                        <dt>
                            <p>{elem.title}({elem.price})</p>
                        </dt>
                    </>
                })
            }

        </dl>
    )
}

なぜ{}ではなく()にする必要があるのか

map のコールバック関数は配列の各要素を「処理して新しい値を返す」必要がある。
各要素をreturnする必要があるため、{}ではなく()で記述する必要がある。
returnをmap関数内で記述しない場合、undefinedが返されてしまう。

const numbers = [1, 2, 3];
const doubled = numbers.map((num) => {
  num * 2; // ここに return がない!
});

console.log(doubled); // [undefined, undefined, undefined]

{}と()の違い

{}: 関数本体を表現する場合に使用。returnを明示的に記載する必要がある。
(): アロー関数の戻り値を省略記法で記述するために使用。この場合は return を書かなくても、関数の結果として括弧内の値がそのまま返される。

Discussion