Reactで大量のテキストボックスコンポーネントをレンダリングする方法のまとめです。
新規で追加した内容や変更箇所をわかりやすいように赤字にしています。
配列を使った方法とmap関数を使った方法2種類となります。
動作環境
エディション | Windows 11 Home |
バージョン | 21H2 |
Node | 18.15.0 |
開発環境
こちらの構成で動かしています。
画面レイアウト
大量のテキストボックスコンポーネントの画面レイアウトとなります。
赤枠の部分がレンダリングしたいテキストボックスとなります。
1列に4個のテキストボックスがレンダリングされている。それが2列分あります。
構成
src
│ index.jsx
│
├─components
│ TextBox.jsx
│
└─pages
ComponentDuplicationPage.jsx
作成したコード
1列に4個のテキストボックスを並べる。それを2列分作成したものがこちらです。
ComponentDuplication.jsx
import React from "react"
export const ComponentDuplication = () => {
return (
<>
<h1>Component Duplication</h1>
<div>
<input type="text" name="input01"></input>
<input type="text" name="input02"></input>
<input type="text" name="input03"></input>
<input type="text" name="input04"></input>
</div>
<div>
<input type="text" name="input01"></input>
<input type="text" name="input02"></input>
<input type="text" name="input03"></input>
<input type="text" name="input04"></input>
</div>
</>
)
}
これをリファクタリングしていきます。
リファクタリングしたコード
使いまわせるようにテキストボックスをコンポーネント化しました。
TextBox.jsx
import React from 'react'
export const TextBox = (props) => {
const { index } = props
return <input key={index} type='text' name={`input${index}`}></input>
}
ComponentDuplication.jsxを修正していきます。
配列を使った方法
配列にTextBoxコンポーネントを4個分格納していきます。格納した後にレンダリングする。
import React from 'react'
import { TextBox } from '../components/TextBox'
export const ComponentDuplication = () => {
let textBoxes = []
for (let i = 0; i < 4; i++) {
textBoxes.push(<TextBox key={i} index={i} />)
}
return (
<>
<h1>Component Duplication</h1>
<div>{textBoxes}</div>
<div>
<input type='text' name='input01'></input>
<input type='text' name='input02'></input>
<input type='text' name='input03'></input>
<input type='text' name='input04'></input>
</div>
</>
)
}
この状態で画面を表示すると、同じレイアウトとなります。
map関数を使った方法
次は配列に格納するのではなくmap関数を使ってTextBoxコンポーネントをレンダリングしていきます。
import React from 'react'
import { TextBox } from '../components/TextBox'
export const ComponentDuplication = () => {
let data = [1, 2, 3, 4]
return (
<>
<h1>Component Duplication</h1>
<div>
{data.map((value, index) => {
return <TextBox key={value} index={index} />
})}
</div>
<div>
<input type='text' name='input01'></input>
<input type='text' name='input02'></input>
<input type='text' name='input03'></input>
<input type='text' name='input04'></input>
</div>
</>
)
}
map関数を応用した方法です。邪道なやりかたですが、こんなこともできる。
import React from 'react'
import { TextBox } from '../components/TextBox'
export const ComponentDuplication = () => {
let data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
return (
<>
<h1>Component Duplication</h1>
{data.map((value, index) => {
return (
<div key={index}>
{data[index].map((value, index) => {
return <TextBox key={value} index={index} />
})}
</div>
)
})}
</>
)
}
結果も同じです。
GitHub
今回のソースコードです。
まとめ
2種類の方法をまとめましたが、コンポーネントのレンダリング方法が違うだけで結果は全て同じとなります。
実際にテキストボックスとして利用する場合は、値の状態管理やonChangeイベントを定義していかないといけませんが、今回は大量のテキストボックスコンポーネントのレンダリング方法についてをまとめました。
おすすめの書籍
JavaScriptのおすすめの書籍です。
おすすめのUdemy講座
ReactでおすすめのUdemy講座を紹介します。
モダンJavaScriptの基礎から始める挫折しないためのReact入門
ReactはJavaScriptの基本的な構文を使用するため、Reactだけの理解では足りないでしょう。
こちらのReact講座は、JavaScriptでのTODOアプリを作成してからReactでのTODOアプリを作成するため、ReactだけではなくJavaScriptを基礎から学ぶことができます。
Reactからいきなり入らずにJavaScriptの基礎から学べる点が、初心者にとてもおすすめできる内容となっています。
【Reactアプリ開発】3種類のReactアプリケーションを構築して、Reactの理解をさらに深めるステップアップ講座
APIを使用してデータを取得したり、react-router-domでのページ遷移を学べるためより実践的な内容となっています。
3種類のReactアプリケーションを作成することができるため、Reactの基礎的な内容を学んだ人におすすめです。
基本的に構文が載っているため、教科書代わりに使える内容となっています。
Reactの前にとてもお世話になりました。JavaScriptをこれから始める方におすすめです。