2025 / 03 / 20
오늘 수업 시간에는 저번 시간 내용 복습과 동적 배열 컨텐츠 렌더링을 배웠습니다.
배열을 받아오고 사용하는 과정에서 오류가 계속 생겨서 살짝 불안했지만.. 결국은 성공했습니다. 오늘 내용은 헷갈리는 부분이 많아서 차근차근 정리해보도록 하겠습니다.
- 동적 배열 컨텐츠 렌더링을 구현하는 방법은 map( ) 메서드를 사용하는 것입니다.
- map( ) 메서드는 배열 내의 모든 항목을 순차적으로 처리하여, 각 항목을 기반으로 새로운 컴포넌트나 UI 요소를 생성하는 데 사용됩니다.
- map( ) 메서드는 배열을 순회하면서, 배열의 각 요소를 컴포넌트로 변환합니다.
- 이를 통해 여러 개의 컴포넌트를 동적으로 렌더링할 수 있습니다.
map( ) 메서드를 사용하는 기본 예시
- 배열을 동적으로 렌더링할 때, map( )을 사용하여 각 항목을 컴포넌트로 변환합니다.
const DUMMY_TODOS = ["Learn React", "Practice React", "Profit!"]; export default function App() { return ( <ul> {DUMMY_TODOS.map((todo) => { return <Todo key={todo} content={todo} />; })} </ul> ); }
- React에서 배열을 렌더링할 때는 key 속성을 설정하는 것이 매우 중요합니다.
- key는 리액트가 어떤 항목이 변경되었는지, 추가되었는지, 또는 제거되었는지를 추적할 수 있도록 돕는 중요한 역할을 합니다.
{DUMMY_TODOS.map((todo) => { return <Todo key={todo} content={todo} />; })}
- 배열 항목의 인덱스(index)를 key로 사용하는 것은 추천하지 않습니다.
- 배열이 변경될 때 항목의 순서가 바뀌거나 항목이 추가될 경우, 효율성이 떨어질 수 있습니다.
{DUMMY_TODOS.map((todo, index) => { return <Todo key={index} content={todo} />; })}
- 배열이나 객체의 값을 간편하게 복사하거나 분배할 수 있습니다.
- map( )을 사용하여 각 항목을 렌더링할 때, 더 깔끔하게 코드를 작성할 수 있습니다.
<div className="card-container"> {cardData.map((data) => ( <Card key={data.title} {...data} /> ))} </div>
- 스프레드 연산자(...data)는 각 항목을 props로 쉽게 전달할 수 있게 해주며, 이렇게 하면 코드가 더 깔끔하고 관리하기 쉬워집니다.
const cardData = [ { title: "React", content: "Learn React", img: "react.png" }, { title: "Cat", content: "Cute Cat", img: "cat.png" }, { title: "Dog", content: "Cute Dog", img: "dog.png" }, ];
- 배열 렌더링 방법에는 map( )과 props 전달이 있습니다.
방법 1 : 배열을 컴포넌트에 props로 전달하기
- 배열을 전체로 한 번에 전달하는 방식입니다.
- DUMMY_TODOS 배열을 props로 전달하여 Todo 컴포넌트에서 처리하는 방법을 보여줍니다.
// 방법 1 export default function App() { return ( <ul> <Todo todos={DUMMY_TODOS} /> </ul> ); } // Todo 컴포넌트 export default function Todo({ todos }) { return ( <div> {todos.map((todo, index) => ( <li key={index}>{todo}</li> ))} </div> ); }
방법 2 : map( ) 함수로 직접 렌더링하기
- map( )을 사용하여 배열을 바로 렌더링하는 방식입니다.
- DUMMY_TODOS 배열을 map( )으로 순회하면서 각 항목을 Todo 컴포넌트로 직접 렌더링합니다.
// 방법 2 export default function App() { return ( <ul> {DUMMY_TODOS.map((todo) => { return <Todo key={todo} content={todo} />; })} </ul> ); } // Todo 컴포넌트 export default function Todo({ content }) { return <li>{content}</li>; }
배열 데이터가 변경될 때 UI 업데이트
- 배열 데이터가 변경되면, React는 자동으로 UI를 리렌더링합니다.
- 새로운 항목을 배열에 추가하려면 setState로 새로운 배열을 생성해야만 React가 이를 감지하고 화면을 업데이트할 수 있습니다.
const [todos, setTodos] = useState(DUMMY_TODOS); function addTodo() { setTodos((prevTodos) => [...prevTodos, "New Task"]); }
51일차 후기
- 자바스크립트를 사용할때 forEach보다 map을 더 많이 사용했어서 익숙했습니다.
- 캡스톤 당시에 리액트의 동적 컨텐츠 렌더링 부분까지 독학했어서.. 어렵진 않았습니다.
- 교수님이 하신 코드를 보고 제가 작성한 코드를 보면 아직 간결하게 작성하는 방법을 모르는건지.. 많이 미숙함이 느껴지는 것 같습니다. 더 열심히해야겠어요.. ᕙ(⇀‸↼‵‵)ᕗ