✅리액트는 컴포넌트 분리를 하는 이유?
개발할 때 편리한 것보다 변경할 때 편리하기 위해서의 관점으로 컴포넌트를 나누는 것이 좋다고 한다. 보통 데이터의 목적(모델)에 따라 변경이 자주 이루어지기때문에 모델이 같다면 "재사용"하고 다르다면 컴포넌트를 분리하도록 한다.
가독성 : 기능이 명확하게 분리되어 있으면 코드를 이해하고 유지보수하기 쉬워진다.
재사용성 : 코드의 재사용성을 높이기 위해서 기능별로 컴포넌트를 분리해야합니다.
⭐✅컴포넌트 분리 기준
1 기능 : 특정 기능을 담당하는 컴포넌트를 분리합니다
2 ui : 화면 구성요소별로 컴포넌트를 분리합니다
⭐⭐⭐⭐⭐✅분리하는 방법
<Working
key={item.id}
item={item}
setTodo={setTodo}
setDone={setDone}
done={done}
todo={todo}
/>
----------------> 자식으로 빠져나간 자리는 이렇게 처리
------>구조분해할당으로 props변수들을 나열했음
const Working = ({ item, setTodo, todo, setDone, done }) =>
{
const todoDel = (id) => {
setTodo(todo.filter((item) => item.id !== id));
};
const clickDoneButtonHandler = (item) => {
const find = todo.filter((value) => value.id !== item.id);
setTodo(find);
setDone([
...done,
{
id: item.id,
title: item.title,
content: item.content,
isDone: !item.done,
},
]);
console.log(item, find);
alert('완료');
};
return (
<div className="componentStyle">
<div className="boxTitle">{item.title}</div>
<h6 className="boxContent">{item.content}</h6>
<button onClick={() => todoDel(item.id)} className="deleteButton">
삭제하기
</button>
<button onClick={() => clickDoneButtonHandler(item)} className="completeButton">
추가
</button>
</div>
);
};
export default Working;
코드 중복을 줄이기 위해 기능 별로 컴포넌트를 분리한다.(코드 중복 최소화)
재사용 가능한 컴포넌트 만들기 : 공통적으로 사용되는 ui요소나 기능을 가진 컴포넌트를 만들어 재사용할 수 있도록 합니다
props 전달 : 부모 컴포넌트에서 자식 컴포넌트로props를 전달하여 각 컴포넌트의 기능을 제어한다.
상태 관리 : 상태 관리를 위해 state를 가진 상위 컴포넌트에서 하위 컴포넌트로props를 전달하고ㅡ 하위 컴포넌트에서는 props를 이용하여 상태를 렌더링합니다.
상위 컴포넌트는 props로 넘겨주고 구조 분해 할당으로 받아와야지만 쓸 수 있다.
Hooks 사용 : 각 컴포넌트의 상태 관리와 라이프사이클 메소드를 관리하기 위해 react hooks를 사용할 수 있다.
용어정리
✅*라이프 사이클이란?
새명주기 메서드라고도 함
컴포넌트가 브라우저상에 나타나고, 사라지게 될 때 호출되는 메서드들
클래스형 컴포넌트에서만 사용 가능
-->mount -->update --> unmount 순서.
⭐✅구조분해 할당이란?
객체 또는 배열에서 원하는 데이터를 추출하여 변수에 할당하는 것
리액트에서 구조분해 할당을 사용하는데 props로 전달받은 객체에서 특정 값을 추출하여 컴포넌트에서 사용하고자 할 때 구조 분해 할당을 사용할 수 있다.
구조분해할당 예시
function MyComponent(props) {
const { title, content } = props;
return (
<div>
<h1>{title}</h1>
<p>By {author}</p>
</div>
);
}
++++++++++++++++++++++
let arr = [1,2,3]
[1,2] = [10,20]
console.log(1) = 10
console.log(2) = 20
-->>설명 :
props 객체에서 title,content 값을 추출하여 각각의 변수에 할당했따. --> 컴포넌트 내부에서 titler과 content를 사용할 수 있다