React | 8. リピート構成部品
import React from "react";
const IterationSample = () => {
return (
<ul>
<li>눈사람</li>
<li>얼음</li>
<li>눈</li>
<li>바람</li>
</ul>
);
};
export default IterationSample;
<li>
ラベル重複.→重複するコンテンツを効率的に表示および管理する方法を学習します.JavaScript配列のmap()関数
JavaScript配列オブジェクトの組み込み関数map関数を使用して、重複する構成部品をレンダリングできます.map関数は、パラメータに渡された関数を使用して、アレイ内の各要素を必要なルールに従って変換し、新しいアレイを生成します.
1.構文
arr.map(callback, [thisArg])
arr.map(callback, [thisArg])
2.例
var processed = numbers.map(function(num){return num*num;});
Arrow Functionと表示されます.var processed = numbers.map(num => num * num);
データ・アレイから構成部品アレイへの変換
1.構成部品の変更
import React from "react";
const IterationSample = () => {
const names = ["눈사람", "얼음", "눈", "바람"];
const nameList = names.map((name) => <li>{name}</li>); // DOM 요소
return <ul>{nameList}</ul>;
};
export default IterationSample;
map関数でJSXを作成する場合、DOM要素とコンポーネントが使用できます.const nameList = names.map((article) =>
// 컴포넌트
<Article
title = {article.title}
writer = {article.writer}
key = {article.id}
/>
);
「key」propがないという警告メッセージが表示されます.
Key
反応器では、keyは、エレメントアレイをレンダリングするときにどのエレメントが変化したかをユーザに理解させる.たとえば、フローデータを処理するときに、要素を新規、削除、または変更できます.
key値がない場合、仮想DOMを比較する過程で、リストを順次比較し、変化を検出します.keyがある場合は、この値を使用して、どのような変化が発生したかをより正確に知ることができます.
1.鍵の設定
キー値を設定すると、map関数パラメータに渡される関数内部に素子propsを設定するようになります.key値は常に一意でなければなりません.そこで、データの高いYut値をキー値に設定します.import React from "react";
const IterationSample = () => {
const names = ["눈사람", "얼음", "눈", "바람"];
const nameList = names.map((name, index) => <li key={index}>{name}</li>);
return <ul>{nameList}</ul>;
};
export default IterationSample;
ユニークな値がない場合にのみ、キーとしてインデックス値を使用します.キーとしてindexを使用すると、配列が変更されたときに効果的にレンダリングできません.
適用
ダイナミックレイアウトをレンダリング!
import React from "react";
const IterationSample = () => {
const names = ["눈사람", "얼음", "눈", "바람"];
const nameList = names.map((name) => <li>{name}</li>); // DOM 요소
return <ul>{nameList}</ul>;
};
export default IterationSample;
const nameList = names.map((article) =>
// 컴포넌트
<Article
title = {article.title}
writer = {article.writer}
key = {article.id}
/>
);
反応器では、keyは、エレメントアレイをレンダリングするときにどのエレメントが変化したかをユーザに理解させる.たとえば、フローデータを処理するときに、要素を新規、削除、または変更できます.
key値がない場合、仮想DOMを比較する過程で、リストを順次比較し、変化を検出します.keyがある場合は、この値を使用して、どのような変化が発生したかをより正確に知ることができます.
1.鍵の設定
キー値を設定すると、map関数パラメータに渡される関数内部に素子propsを設定するようになります.key値は常に一意でなければなりません.そこで、データの高いYut値をキー値に設定します.
import React from "react";
const IterationSample = () => {
const names = ["눈사람", "얼음", "눈", "바람"];
const nameList = names.map((name, index) => <li key={index}>{name}</li>);
return <ul>{nameList}</ul>;
};
export default IterationSample;
ユニークな値がない場合にのみ、キーとしてインデックス値を使用します.キーとしてindexを使用すると、配列が変更されたときに効果的にレンダリングできません.適用
ダイナミックレイアウトをレンダリング!
動的データの表示
初期状態の設定→データ追加機能の実施→データ削除機能の実施
1.初期状態の設定
使用
useState
状態設定3つの状態を使用して、import React, { useState } from "react";
const IterationSample = () => {
const [names, setNames] = useState([
{ id: 1, text: "눈사람" },
{ id: 2, text: "얼음" },
{ id: 3, text: "눈" },
{ id: 4, text: "바람" },
]);
const [inputText, setInputText] = useState("");
const [nextId, setNextId] = useState(5); // 새로운 항목을 추가할 때 사용할 id
const nameList = names.map((name) => <li key={name.id}>{name.text}</li>);
return <ul>{nameList}</ul>;
};
export default IterationSample;
2.データ付加機能の実施
import React, { useState } from "react";
const IterationSample = () => {
const [names, setNames] = useState([
{ id: 1, text: "눈사람" },
{ id: 2, text: "얼음" },
{ id: 3, text: "눈" },
{ id: 4, text: "바람" },
]);
const [inputText, setInputText] = useState("");
const [nextId, setNextId] = useState(5); // 새로운 항목을 추가할 때 사용할 id
const onChange = (e) => setInputText(e.target.value);
const onClick = () => {
const nextNames = names.concat({
id: nextId, // nextId 값을 id로 설정
text: inputText,
});
setNextId(nextId + 1); // nextId 값에 1을 더해 준다.
setNames(nextNames); // names 값을 업데이트한다.
setInputText(""); // inputText를 비운다.
};
const nameList = names.map((name) => <li key={name.id}>{name.text}</li>);
return (
<>
<input value={inputText} onChange={onChange}></input>
<button onClick={onClick}>추가</button>
<ul>{nameList}</ul>;
</>
);
};
export default IterationSample;
3.データ削除機能の実施
各アイテムをダブルクリックすると、そのアイテムが画面から消える機能を実現します.
不変性を維持しながら更新し、不変性を維持しながらアレイ内の特定の項目を削除する場合は、アレイの組み込み関数フィルタを使用します.
filter関数を使用すると、配列内で特定の条件を満たす要素だけが分類されやすくなります.
const numbers = [1, 2, 3, 4, 5, 6];
const biggerThanThree = numbers.filter( number => number > 3);
結果が出た[4, 5, 6]
const numbers = [1, 2, 3, 4, 5, 6];
const biggerThanThree = numbers.filter( number => number != 3;
結果が出た[1, 2, 4, 5, 6]
import React, { useState } from "react";
const IterationSample = () => {
const [names, setNames] = useState([
{ id: 1, text: "눈사람" },
{ id: 2, text: "얼음" },
{ id: 3, text: "눈" },
{ id: 4, text: "바람" },
]);
const [inputText, setInputText] = useState("");
const [nextId, setNextId] = useState(5); // 새로운 항목을 추가할 때 사용할 id
const onChange = (e) => setInputText(e.target.value);
const onClick = () => {
const nextNames = names.concat({
id: nextId,
text: inputText,
});
setNextId(nextId + 1);
setNames(nextNames);
setInputText("");
};
const onRemove = (id) => {
const nextNames = names.filter((name) => name.id != id); // 클릭한 id가 아닌 것들만 분류해서 배열을 만든다.
setNames(nextNames);
};
const nameList = names.map((name) => (
<li key={name.id} onDoubleClick={() => onRemove(name.id)}>
{name.text}
</li>
));
return (
<>
<input value={inputText} onChange={onChange}></input>
<button onClick={onClick}>추가</button>
<ul>{nameList}</ul>;
</>
);
};
export default IterationSample;
整理する
シンボル配列をレンダリングするときは、キー値の設定に常に注意してください.また、key値は常に一意である必要があります.キーの値が繰り返されると、レンダリング中にエラーが発生します.
ステータスでアレイを変形する場合は、アレイに直接アクセスして変更するのではなく、concat、filterなどのアレイ内蔵関数を使用して新しいアレイを作成し、新しい状態に設定します.
Reference
この問題について(React | 8. リピート構成部品), 我々は、より多くの情報をここで見つけました
https://velog.io/@printver_2world/React-7.-컴포넌트-반복
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(React | 8. リピート構成部品), 我々は、より多くの情報をここで見つけました https://velog.io/@printver_2world/React-7.-컴포넌트-반복テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol