2020.01.26
컴포넌트의 사용 중 컴포넌트 내부에서 변할 수 있는 값
Props : 이름, 성별 (불변)
State : 나이, 취업 여부(변하는 값)
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child text={"I'm the eldest child"} text2={"I'm the eldest child2"} />
{/* Child 컴포넌트에 또 다른 문자열을 props 로 전달해 보세요 */}
<Child />
</div>
);
}
function Child(props) {
// console 을 열어 props 의 형태를 직접 확인하세요.
console.log("props : ", props);
return (
<div className="child">
<p>{props.text}</p>
<p>{props.text2}</p>
</div>
);
}
const App = () => {
const itemOne = "React를";
const itemTwo = "배우고 있습니다.";
return (
<div className="App">
{/* Learn 컴포넌트에 itemOne 과 itemTwo 를
props 로 전달하세요 */}
<Learn>{`${itemOne} ${itemTwo}`}</Learn>
<Learn />
</div>
);
};
const Learn = (props) => {
// 전달받은 props 를 아래 <div> tag 사이에 사용하여
// "React를 배우고 있습니다" 라는 문장이 렌더링되도록 컴포넌트를 완성하세요
return (
<div className="Learn">
<p>{props.children}</p>
</div>
);
};
Hooks 는 리액트 v16.8 에 새로 도입된 기능이다. 함수형태의 컴포넌트에서 사용되는 몇가지 기술을 Hook이라고 부른다.
함수형 컴포넌트에서도 상태 관리를 할 수 있는 useState, 그리고 렌더링 직후 작업을 설정하는 useEffect 등의 기능 등을 제공한다.
React에서는 state 를 다루는 방법 중 하나
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
이벤트는 camelCase 사용
JSX를 사용하여 문자열이 아닌 함수로 이벤트 처리 함수를 전달
<button onClick={handleEvent}>Event</button>
onChange 이벤트가 발생하면 e.target.value 를 통해 이벤트 객체에 담겨있는 input 값을 읽어올 수 있습니다.
function NameForm() {
const [name, setName] = useState("");
const handleChange = (e) => {
setName(e.target.value);
}
return (
<div>
<input type="text" value={name} onChange={handleChange}></input>
<h1>{name}</h1>
</div>
)
};
onClick 이벤트는 말 그대로 사용자가 클릭이라는 행동을 하였을 때 발생하는 이벤트입니다.
undefined 가 onClick에 적용되어 아무 결과도 가져 오지 않는다.//틀린 코드
function NameForm() {
const [name, setName] = useState("");
const handleChange = (e) => {
setName(e.target.value);
}
return (
<div>
<input type="text" value={name} onChange={handleChange}></input>
<button onClick={alert(name)}>Button</button>
<h1>{name}</h1>
</div>
);
};
//올바른 코드
<button onClick={() => alert(name)}>Button</button>
// 올바른 코드 2
const handleClick = () => {
alert(name);
};
return (
<div>
<button onClick={handleClick}>Button</button>
</div>
상향식으로 앱을 만든다.
- 테스트가 쉽고 확장성이 좋다.
데이터를 전달하는 주체는 부모 컴포넌트
- 데이터의 흐름은 하향식!!
- 리액트는 단방향 데이터 흐름