반응형
props
컴포넌트 사이에서 데이터를 주고받을 수 있게 하는 것.
// App.js
function App() {
const name = 'hobs';
const enrolled = 'yes';
return (
<div>
<Paper student={ name } class={ enrolled } />
// Paper.js 컴포넌트에게
// 변수 name을 student라는 props로,
// 변수 enrolled를 class라는 props로 넘겨줌.
</div>
);
}
// Paper.js
function Paper(props) {
return (
<div>
<p>{props.student}</p> // 'hobs' 출력
<p>{props.class}</p> // 'yes' 출력
</div>
);
}
상위 컴포넌트인 App.js가
하위 컴포넌트인 Paper.js에게 데이터를 전달해주고 있음.
props는 이렇게 하위 컴포넌트로만 전달이 가능함.
1.
만약 상위 컴포넌트인 App.js가
하위 컴포넌트인 Paper.js를 거쳐
최하위 컴포넌트인 Paper2.js에게 데이터를 전달한다면 어떻게 해야할까?
// Paper.js
function Paper(props) {
return (
<div>
<Paper2 student={props.student} class={props.class} />
</div>
);
}
// Paper2.js
function Paper2(props) {
return (
<div>
<p>{props.student}</p> // 'hobs' 출력
<p>{props.class}</p> // 'yes' 출력
</div>
);
}
중간에 낀 Paper.js만 위 예시처럼 바꿔주면 됨.
2.
만약 데이터가 500개라 500줄을 다 보여줘야한다면 어떻게 할까?
// App.js
const data = [
{company: 'apple', say: 'iPhone 12, Blast past fast.'},
{company: 'samsung', say: 'Galaxy S21, Buds Pro.'},
{company: 'LG', say: 'Innovation for a Better Life.'},
];
return (
<div>
{ data.map((item) =>
<Paper name={ item.company } txt={ item.say } />
) };
</div>
);
// Paper.js
function Paper(props) {
return(
<h2>{ props.name }</h2>
<p>{ props.say }</p>
);
}
이렇게 해주면 아래와같이 개수만큼 잘 나온다.
state
리액트에서는 변수값이 변경된다는 것을 반영하지 못함.
let counter = 0;
const incrementer = () => {
console.log(counter);
counter += 1;
};
return (
<div>
{counter}
<button onClick={incrementer}>증가</button>
</div>
);
아무리 버튼을 눌러봐도 변수 counter는 변하지 않지만,
콘솔에서는 잘 변경되고 있음.
// 상단에 useState import
import {useState} from 'react';
// useState 선언을 해줘야 함.
// useState() 괄호 안에는 배열, 객체, 숫자, 불리언, 텍스트 등 여러 데이터가 들어감.
// 하나의 useState를 생성하면 배열 형태로 [변수, 변수수정할수있는함수]가 자동생성 됨.
const [counter, setCounter] = useState(0);
const incrementer = () => {
// 변수를 수정할때는 항상 '변수수정할수있는함수'를 통해서 수정해야함.
setCounter((prev) => prev + 1);
};
'react' 카테고리의 다른 글
[React] 컴포넌트끼리 데이터 넘기기 총정리 (0) | 2023.12.13 |
---|---|
[React] useState로 여러 상태를 관리하는 법과 set함수에서 콜백함수 쓰는 이유 (0) | 2023.12.13 |
퀵스타트 리액트 1편 (0) | 2023.08.23 |
[react] className 쓰는 법(총정리) (0) | 2023.05.04 |
닷홈 리액트 프로젝트 호스팅/배포 (2) | 2021.06.30 |