IF) App 컴포넌트에서 Counter 컴포넌트에게 Counter의 초기 값을 0이 아닌 App 컴포넌트가 전달하는 값으로 쓰라는 명령을 내리고 싶다면? --> Props이라는 명령어를 이용한다.

부모 컴포넌트인 App 컴포넌트에서 자식 컴포넌트인 Counter 컴포넌트에게 어떤 값을 이름을 붙여 전달할 수 있다(Props)
Counter 컴포넌트에서는 부모에서 내려준 props를 매개변수로 받아서 사용할 수 있다.
import React, {useState} from 'react';
const Counter = (props) => {
console.log(props);
const [count, setCount] = useState(0);
const onIncrease = () => {
setCount(count + 1);
};
const onDecrease = () => {
setCount(count - 1);
};
return (
<div>
<h2>{count}</h2>
<button onClick={onIncrease}>+</button>
<button onClick={onDecrease}>-</button>
</div>
);
};
export default Counter;

객체 안에 담겨서 오게 된다.
여기서 a = {1} 하나만 더 담아서 보내보자 !


props가 몇 개를 보내든 객체 안에 담겨서 오는 것을 확인할 수 있다.
props를 Counter 컴포넌트에서 꺼내 쓰려면 점 표기법을 이용해서 사용할 수 있다.
import React, {useState} from 'react';
const Counter = (props) => {
console.log(props);
const [count, setCount] = useState(props.initialValue);
const onIncrease = () => {
setCount(count + 1);
};
const onDecrease = () => {
setCount(count - 1);
};
return (
<div>
<h2>{count}</h2>
<button onClick={onIncrease}>+</button>
<button onClick={onDecrease}>-</button>
</div>
);
};
export default Counter;

--> props을 여러 개 전달해도 잘 나오지만, <Counter a={1}, b={2}, c = {3} ,,,, 이런식으로 전달하면 너무 길고
보기가 불편하다. 이럴 때는 자식 컴포넌트에게 전달해야하는 props를 객체로 만든 후 객체를
펼쳐서 전달하는 spread 연산자를 통해 전달해도 똑같은 결과를 확인할 수 있다.
import React from 'react';
// import './App.css';
import MyHeader from './MyHeader';
import Counter from './Counter';
function App() {
const number = 5;
const counterProps = {
a:1,
b:2,
c:3,
d:4,
e:5,
initialValue:5,
};
return (
<div>
<MyHeader />
<Counter {...counterProps}/>
</div>
);
}
export default App;

그러면, 객체의 spread 연산자로 전달 했으니, 받는 쪽에서는 똑같이 객체로 받을 수 있으니
비구조화 할당을 통해서 받을 수도 있다.
비구조화 할당을 통해 이쪽 매개 변수로 전달 되는 props라는 객체에서 initialValue라는 값만 꺼내서 쓴 것

IF) App.js의 counterProps에서 initialValue의 값이 누락되어 undefined 값이 전달되고, 버튼을 누르면 숫자가 아니라는 오류 발생 --> 명백한 bug!
의도치 않게 undefined 값으로 전달될 것 같을 때를 방지하기 위한 방법


Props로는 자식 컴포넌트에게 정적인 데이터 뿐만아니라 동적인 데이터도 전달할 수 있다.
-> State같은 것
<count , State가 홀수인지 짝수인지 실시간으로 알려주는 기능>
OddEvenResult.js

React의 컴포넌트는 부모가 내려주는 Props가 변경 되면 다시 랜더해서 리랜더가 일어난다.
<컴포넌트를 컴포넌트로 감싸서 미관상 여백주기>
Container.js

컴포넌트의 사이에 JSX요소를 배치하게 되면

컴포넌트 컨테이너에 자식으로 배치 된

이 요소들은 컨테이너 컴포넌트의 children이라는 props으로 전달.

children을 값처럼 활용해서 div를 바깥에 감싸서 활용하는 것.
'React.js' 카테고리의 다른 글
| React에서 사용자 입력 처리하기 (0) | 2022.04.11 |
|---|---|
| 감성 일기장 만들기 - Point (0) | 2022.04.09 |
| State(상태) (0) | 2022.04.08 |
| JSX - HTML with JS (0) | 2022.04.08 |
| Create React App (0) | 2022.04.08 |