: UI에 동적으로 표현될 데이터
[예시 : 장바구니 화면에서 상태 찾기]
➡️ 대표적으로 네트워크 요청, API 호출이 있음
[예시]
UI상태 찾기 연습에서 보았던 장바구니의 아이템(컴포넌트)들을 API로 받아오는데, 데이터 전송여부에 따라 로딩이 길어질 수 있음
각 컴포넌트가 개별로 상태를 갖고 있으면 안되나?
➡️ 서로 다른 컴포넌트가 사용하는 상태의 종류가 다르면, 서로 다른 출처(source)가 있어도 상관 x
하지만, 서로 다른 컴포넌트가 동일한 상태를 다룬다면, 서로 다른 출처로부터 가져오는 것은 피해야 함
[예시(링크)]
import React, { useState } from 'react';
import styled from 'styled-components';
const Container = styled.div`
border: 5px solid green;
padding: 10px;
margin: 10px;
position: relative;
`;
const Quantity = styled.div`
text-align: center;
color: red;
border: 5px solid red;
padding: 3px;
font-size: 1.2rem;
`;
const Button = styled.button`
margin-right: 5px;
`;
const Text = styled.div`
color: ${(props) => (props.color ? props.color : 'black')};
font-size: ${(props) => (props.size ? props.size : '1rem')};
font-weight: ${(props) => (props.weight ? '700' : 'inherit')};
`;
export default function App() {
const [number, setNumber] = useState(1);
const plusNum = () => {
setNumber(number + 1);
};
const minusNum = () => {
setNumber(number - 1);
};
console.log('Parents');
return (
<Container>
<Text weight size="1.5rem">
[Parents Component]
</Text>
<Text>
Child4 컴포넌트에 있는 버튼을 통해
<br /> state를 변경하려고 합니다.. 🤮
</Text>
<Text weight color="tomato">
Props Driling이 발생!!
</Text>
<Quantity>{`수량 : ${number}`}</Quantity>
<Child1 plusNum={plusNum} minusNum={minusNum} />
</Container>
);
}
function Child1(
{
/* props로 전달받은 plusNum, minusNum를 가져오세요 */
plusNum,minusNum
}
) {
console.log('Child1');
return (
<Container>
<Text>[Child 1 Component]</Text>
{/* plusNum, minusNum 함수를 props로 전달해주세요! */}
<Child2 plusNum={plusNum} minusNum={minusNum}/>
</Container>
);
}
function Child2(
{
/* props로 전달받은 plusNum, minusNum를 가져오세요 */
plusNum,minusNum
}
) {
console.log('Child2');
return (
<Container>
<Text>[Child 2 Component]</Text>
{/* plusNum, minusNum 함수를 props로 전달해주세요! */}
<Child3 plusNum={plusNum} minusNum={minusNum}/>
</Container>
);
}
function Child3(
{
/* props로 전달받은 plusNum, minusNum를 가져오세요 */
plusNum,minusNum
}
) {
console.log('Child3');
return (
<Container>
<Text>[Child 3 Component]</Text>
{/* plusNum, minusNum 함수를 props로 전달해주세요! */}
<Child4 plusNum={plusNum} minusNum={minusNum}/>
</Container>
);
}
function Child4({ plusNum, minusNum }) {
console.log('Child4');
return (
<Container>
<Text>[Child 4 Component]</Text>
<Button onClick={plusNum}>👍</Button>
<Button onClick={minusNum}>👎</Button>
</Container>
);
}
❗️props의 전달횟수가 5회 이내로 많지 않다면 큰문제가 되지 않지만 더 많아진다면?
⚒️ 해결