https://react.dev/learn 를 보고 정리한다.
Creating and nesting components
React는 Component로 이루어진다.
Component는 고유한 logic, apperance를 가진 UI의 일부이다.
React Component는 Markup을 반환하는 JS function이다.
function MyButton() {
return (
<button>I'm a button</button>
);
}
생성된 Component를 다른 Component에 중첩(nest)시킬 수 있다.
React Component 이름은 항상 대문자로 시작해야 하며 HTML 태그는 소문자여야 합니다.
Writing markup with JSX
선택 사항이지만, 편의를 위해 대부분의 React project는 JSX를 사용한다.
Component는 여러 개의 JSX태그를 반환할 수 없다.
- 여러 개의 태그를 반환하려면 이를 wrapping하는 공통된 부모를 사용하면 된다.
- wrapper : <div>...</div>
, <>...</>
- html-to-jsx : 링크
Adding styles
className
을 사용해 CSS class를 사용할 수 있다.
<img className="avatar" />
React는 CSS 파일을 추가하는 법을 규정하지 않는다.
React와 관계없이 아래처럼 CSS 파일을 추가할 수 있다.
- HTML에 태그를 추가
- 빌드 도구/프레임워크 사용
Displaying data
중괄호를 사용하면 JavaScript로 "escape back"하여 코드에서 변수를 사용자에게 표시할 수 있다.
- 단순한 변수뿐만 아니라 복잡한 표현식도 넣을 수 있다.
return (
<h1>
{user.name}
</h1>
);
Conditional rendering
React에서 조건을 작성하기 위한 특별한 구문은 없다. 일반적으로 JS처럼 사용하면 된다.
if
문 사용
자세한 내용 : 링크
let content;
if (isLoggedIn) {
content = <AdminPanel />;
} else {
content = <LoginForm />;
}
return (
<div>
{content}
</div>
);
?
사용
자세한 내용 : 링크
<div>
{isLoggedIn ? (
<AdminPanel />
) : (
<LoginForm />
)}
</div>
&&
사용
자세한 내용 : 링크
<div>
{isLoggedIn && <AdminPanel />}
</div>
Rendering lists
component의 list를 렌더링하기 위해 for
loop와 array의 map()
함수를 사용한다.
map()
함수를 이용해 배열의 내용을 <li>
항목으로 변환한다.
이때, 목록의 각 항목에 대해 고유한 식별자(문자열/숫자)를 key
로 지정해야한다.
- React는 추후 항목을 삽입, 삭제 또는 재정렬하는 경우 어떤 일이 발생했는지 이해하기 위해 키에 의존합니다.
Responding to events
event handler
함수를 사용해 Component 내부에서 발생하는 이벤트에 응답할 수 있다.
function MyButton() {
function handleClick() {
alert('You clicked me!');
}
return (
<button onClick={handleClick}>
Click me
</button>
);
}
이때, 끝에 이벤트 호출을 뜻하는 괄호를 붙이지 않아야 한다.onClick={handleClick}
- 이벤트 핸들러 함수를 호출하는 것이 아니라 전달하기만 해야한다.
Updating the screen
component에 state
를 사용해 기억하고자 하는 정보를 저장할 수 있다.
- import
useState
useState
로 부터 현재 state와 state를 업데이트할 수 있는 함수를 받는다.- 이름을 맘대로 지정할 수 있지만 보통
[something, setSomething]
로 짓는다.
- 이름을 맘대로 지정할 수 있지만 보통
state
를 사용해 카운터 버튼을 만들면 아래와 같다.
- 초기 버튼은
useState()
을 사용해 0으로 설정했기 때문에 count가 0으로 표시된다. - 버튼을 클릭하면
setCount()
로 인해 새로운 값이 생기며, 여기서는 count를 증가시킨다.
Using Hooks
use
로 시작하는 하는 함수를 Hooks라고 한다.useState
는 React에서 제공하는 built-in Hook이다.
- 그 외 built-in Hooks : React API reference
- 기존의 Hook을 결합해 자신만의 Hook을 작성 가능
Hooks는 일반 함수보다 더 제한적이다.
- 컴포넌트의 최상위 레벨에서만 Hooks을 호출 할 수 있다.
- 조건이나 루프에서
useState
를 사용하려면 새로운 Component를 만들어서 넣어야한다.
Sharing data between components
위의 예제에서 각 MyButton
는 독립적인 count
를 가진다.
그러나 데이터를 공유하고 함께 업데이트할 수 있는 Component들이 필요한 경우가 많다.
이를 위해서는 공유하려는 Component들을 포함하는 가장 가까운 Component로 state
를 이동해야한다.
위 예제에서 count
를 공유하도록 코드를 구성해보자.
MyButton
에서MyApp
으로 state를 이동한다.MyApp
의 state를MyButton
에게 내려준다.(click handler도 포함)- 중괄호를 사용해 정보를 전달할 수 있다. 이렇게 전달하는 정보를
props
라고 한다.
- 중괄호를 사용해 정보를 전달할 수 있다. 이렇게 전달하는 정보를
MyButton
에서 부모 Component에서 내려준 정보를 읽도록 변경한다.
이때, state를 위로 이동하여 Component간의 공유하는 것을 “lifting state up”라고 부른다.
'React' 카테고리의 다른 글
React (0) | 2022.07.22 |
---|---|
React - Redux : initialState: undefined 에러 해결 (0) | 2022.03.28 |
React Router V5 (0) | 2022.02.27 |