[解決済み] reactのコンポーネントをmapとjoinでレンダリングするには?
2022-06-28 07:48:39
質問
私は、文字列の配列を表示するコンポーネントを持っています。コードは次のようになります。
React.createClass({
render() {
<div>
this.props.data.map(t => <span>t</span>)
</div>
}
})
全く問題なく動作しています。
つまり、もし
props.data = ['tom', 'jason', 'chris']
と記述した場合、ページ内のレンダリング結果は
tomjasonchris
.
そして、すべての名前をカンマで結合したいので、コードを次のように変更します。
this.props.data.map(t => <span>t</span>).join(', ')
しかし,レンダリング結果は
[Object], [Object], [Object]
.
オブジェクトをどのように解釈すれば、レンダリングされるリアクトコンポーネントになるのかが分かりません。何か提案はありますか?
どのように解決するのですか?
簡単な解決策は
reduce()
を第二引数なしで、前の結果を広げることなく使用することです。
class List extends React.Component {
render() {
<div>
{this.props.data
.map(t => <span>{t}</span>)
.reduce((prev, curr) => [prev, ', ', curr])}
</div>
}
}
第2引数なし。
reduce()
は
はインデックス1から始まります。
となり、React はネストされた配列に完全に対応できるようになります。
コメントで言われているように、少なくとも1つのアイテムを持つ配列にのみこれを使いたいのです、なぜなら
reduce()
を実行すると、空の配列が投げられます。通常、空の配列に対しては「this is empty」のようなカスタムメッセージを表示したいので、これは問題ではありません。
Typescriptの更新
これをTypescriptで(type-unsafeのない
any
を使って)
React.ReactNode
の型パラメータを
.map()
:
class List extends React.Component {
render() {
<div>
{this.props.data
.map<React.ReactNode>(t => <span>{t}</span>)
.reduce((prev, curr) => [prev, ', ', curr])}
</div>
}
}
関連
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み] error 'document' is not defined : eslint / React
-
[解決済み] Webpack のコンパイルに失敗した
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] Reactコンポーネントに条件付きで属性を追加するにはどうすればよいですか?
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
-
[解決済み] Reactでes6クラスを使うときの「super()」と「super(props)」の違いとは?
-
[解決済み] Reactの "after render "コード?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] ReactjsのEsLintの "react / jsx-props-no-spreading "エラーを無効化する。
-
[解決済み] axios-mock-adapter onGet mock data not effective.
-
[解決済み] react.jsで複数のモジュールをエクスポートする
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] AxiosにCORSの問題が発生
-
[解決済み] React」は定義される前に使用されていた
-
[解決済み] ESLintとTSLintの違い【クローズド】について