일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프론트엔드
- 투두앱만들기
- 노마드코더
- webdevelopment
- 리액트
- github
- 클래스
- JavaScript
- 웹개발
- CSS
- 불변성
- 객체지향프로그래밍
- 상속
- 자바스크립트
- Props
- 부트캠프
- 캡슐화
- 논리연산자
- frontend
- 추상화
- 패스트캠퍼스
- 타입스크립트
- js
- Fetch
- REACT
- Hooks
- 자바스트립트
- OOP
- typeScript
- Zustand
- Today
- Total
connecting dots
React - 예산 계산기 앱 만들기 | Props(컴포넌트 간 데이터 전달), map(지출 목록 나열) 본문
React - 예산 계산기 앱 만들기 | Props(컴포넌트 간 데이터 전달), map(지출 목록 나열)
dearsuhyun 2024. 7. 17. 16:44부모 컴포넌트에서 자녀 컴포넌트로 데이터를 전달할 때 !
Props
- Properties의 줄임말
- Props는 상속하는 부모 컴포넌트로부터 자녀 컴포넌트에 데이터 등을 전달하는 방법
- Props는 읽기 전용(immutable)으로 자녀 컴포넌트에서는 데이터를 변경할 수 없음 (읽기만 할 수 있음)
(변하게 하고자 하면 부모 컴포넌트에서 state를 변경시켜줘야 함)
App.js
initialExpenses = [
{ id: 1, charge: "렌트비", amount: "1600" },
{ id: 2, charge: "교통비", amount: "400" },
{ id: 3, charge: "식비", amount: "1200" },
];
<ExpenseList initialExpenses={this.initialExpenses} />
{/* expenseList로 데이터를 내려줌 */}
1. <ExpenseList ... />:
• ExpenseList는 다른 컴포넌트를 의미합니다.
• 이 컴포넌트를 JSX 문법을 사용하여 렌더링합니다.
2. initialExpenses={this.initialExpenses}:
• initialExpenses는 props로 전달될 속성 이름입니다.
• {this.initialExpenses}는 initialExpenses 속성에 전달될 데이터입니다.
• this.initialExpenses는 현재 컴포넌트 클래스의 initialExpenses 속성을 참조합니다.
ExpenseList.js
export class ExpenseList extends Component {
render() {
console.log(this.props.initialExpenses);
{this.props.initialExpenses.map((expense) => {
return <ExpenseItem expense={expense} key={expense.id} />;
})}
리스트들에 고유한 key 값을 주면 에러가 해결됨. (id값으로 1,2,3 --> 고유한 값으로 리스트들에 하나씩 할당해주면 됨)
만약 이 리스트들이 중간에 삭제되거나 중간에 삽입되는 케이스가 있다면 index값을 key값으로 주면 안되고
실질적인 고유한 값을 줘야 하지만 여기서는 중간에 삭제, 삽입되는 경우가 없으므로 index 값으로 !
map() 메소드
배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환함
const array1 = [1, 4, 9, 16];
// Pass a function to map
const map1 = array1.map((x) => x * 2);
console.log(map1);
// Expected output: Array [2, 8, 18, 32]
ExpenseList.js
{this.props.initialExpenses.map((expense) => {
return <ExpenseItem expense={expense} />;
})}
1. this.props.initialExpenses:
• 부모 컴포넌트로부터 전달받은 initialExpenses라는 배열입니다.
• 이 배열에는 여러 지출 항목 객체들이 들어 있습니다.
• 예: [{ id: 1, charge: '렌트비', amount: 1000 }, { id: 2, charge: '커피', amount: 5 }]
2. .map((expense) => { ... }):
• map 함수는 배열의 각 요소에 대해 주어진 함수를 호출하고, 그 결과로 새로운 배열을 생성합니다.
• 여기서 map 함수는 initialExpenses 배열의 각 항목(expense)에 대해 아래 함수를 실행합니다.
3. (expense) => { return <ExpenseItem expense={expense} />; }:
• 이 함수는 expense 객체를 받아서 JSX를 반환합니다.
• expense는 initialExpenses 배열의 각 항목입니다.
4. <ExpenseItem expense={expense} />:
• ExpenseItem이라는 컴포넌트를 생성합니다.
• expense라는 prop을 ExpenseItem 컴포넌트에 전달합니다.
• 예: expense 객체가 { id: 1, charge: '렌트비', amount: 1000 }인 경우, 이 데이터를 ExpenseItem 컴포넌트에 전달합니다.
ExpenseItem.js
<span className="expense">{this.props.expense.charge}</span>
<span className="amount">{this.props.expense.amount}</span>
1. this.props.expense:
• props는 부모 컴포넌트가 자식 컴포넌트에 전달하는 데이터입니다.
• expense는 props로 전달된 객체입니다. 이 객체는 지출 항목의 정보를 포함하고 있습니다.
• 예를 들어, expense 객체는 { charge: "렌트비", amount: 1000 }와 같은 형태일 수 있습니다.
2. <span className="expense">...</span>:
• <span> 요소는 HTML의 인라인 요소입니다. 텍스트를 그룹화하는 데 사용됩니다.
• className="expense": 이 <span> 요소에 expense라는 CSS 클래스를 적용합니다. 이를 통해 스타일을 지정할 수 있습니다.
• {this.props.expense.charge}: 중괄호 {}를 사용하여 JavaScript 표현식을 삽입합니다.
• this.props.expense.charge는 expense 객체의 charge 속성 값을 가져와서 표시합니다.
• 예를 들어, expense.charge가 “렌트비”라면, 이 부분은 “렌트비”라는 텍스트를 화면에 표시합니다.
3. <span className="amount">...</span>:
• <span> 요소는 HTML의 인라인 요소입니다. 텍스트를 그룹화하는 데 사용됩니다.
• className="amount": 이 <span> 요소에 amount라는 CSS 클래스를 적용합니다. 이를 통해 스타일을 지정할 수 있습니다.
• {this.props.expense.amount}: 중괄호 {}를 사용하여 JavaScript 표현식을 삽입합니다.
• this.props.expense.amount는 expense 객체의 amount 속성 값을 가져와서 표시합니다.
• 예를 들어, expense.amount가 1000이라면, 이 부분은 “1000”이라는 텍스트를 화면에 표시합니다.
전체 과정
1. 부모 컴포넌트(App.js)에서 initialExpenses 배열을 ExpenseList에 전달합니다.
2. ExpenseList 컴포넌트는 initialExpenses 배열을 순회하며 각 항목에 대해 ExpenseItem 컴포넌트를 생성하고 렌더링합니다.
3. 각 ExpenseItem 컴포넌트는 개별 지출 항목을 화면에 표시합니다.
'Online Class > DevCamp' 카테고리의 다른 글
React | React Hooks란 ? (0) | 2024.07.20 |
---|---|
React - 예산 계산기 앱 만들기 | JSX Key 속성, filter 메소드, React State, super (props), state와 super (0) | 2024.07.19 |
npx create-react-app 구조 살펴보기, react 실행하기, SPA이란 ?, JSX란 ? (1) | 2024.07.17 |
Typescript VS Javascript, node.js & npm (0) | 2024.07.17 |
웹 앱의 구성요소, 모던 Javascript와 개발 환경 (0) | 2024.07.16 |