diff --git a/frontend/lecture/src/components/Callout/index.tsx b/frontend/lecture/src/components/Callout/index.tsx new file mode 100644 index 0000000..7e6d2d5 --- /dev/null +++ b/frontend/lecture/src/components/Callout/index.tsx @@ -0,0 +1,10 @@ +import { PropsWithChildren } from 'react'; + +export const Callout = (props: PropsWithChildren<{ title: string }>) => { + return ( +
{props.title}
+ {props.children} +
+ 브라우저는 이미
+ 그런데, 얘들만으로 웹 어플리케이션을 만들기에는 무리가 있습니다. +
+EX) 투두 리스트
++ 상태가 복잡해지면 복잡해질수록 이런 코드는 유지보수하기 어렵다 +
+ + ), + }, + { + title: 'jQuery도 마찬가지', + content: ( +2006년에 등장한 jQuery를 사용하면 조금 더 간단해진다:
++ 복잡한 웹 애플리케이션 개발의 필요성이 증가하면서 프론트엔드가 + 분야로서 분리되고 다양한 프레임워크가 등장 +
++ 이들 모두 컴포넌트 기반의 선언적인 방식으로 UI를 구성할 수 있게 + 해줌 +
+그 중에서도 리액트가 압도적으로 인기가 많다
++ 최근 트렌디한 프론트엔드 개발을 하는 곳이라면 대부분 React + 기반의 프레임워크를 사용합니다 +
+
+ 하지만 리액트도 하나의 트렌드일 뿐, 언제든 저물 수 있다
+
+ 언제나 프론트엔드의 근본은 HTML, CSS, JavaScript
+
+ 세미나 이름을 React
리액트의 기본 구성 요소
+독립적이고 재사용 가능한 UI 조각
++ 리액트 말고 다른 프레임워크들도, 대부분 컴포넌트 기반으로 + 개발됩니다 +
+You clicked {count} times
`, + ` `, + `You clicked {count} times
`, + ` `, + `+ 상태 === 값을 저장하는 곳이라고 생각하기 쉬운데, React 의 상태는 + 그렇게 간단한 개념이 아닙니다 +
++ 리액트 개발 경험을 기반으로, 정말 이 컴포넌트의{' '} + 상태가 무엇이어야 할지 진지하게 고민해야 합니다 +
++ 그러면 자연스럽게 컴포넌트는 버그가 없어지고 재사용하기 + 좋아집니다 +
+리액트 코드를 보면 이렇게 HTML같이 생긴 코드가 있음
+위 코드는 빌드 시 아래와 같이 변환됩니다:
+JSX는 HTML과 비슷한 개발 경험을 주기 위해 고안된 문법
+따라서 그냥 JavaScript 값일 뿐
++ 즉 아래와 같이 변수에 할당할 수 있고, 함수에 인자로 넘길 수 + 있고, 반환값으로 사용할 수 있음 +
++ 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법. 마치 + html에 속성 주듯이 +
+수정을 위해서는 onChange 콜백을 넘긴다
++ 좁은 의미에서, 컴포넌트라는 함수가 실행되어 JSX를 반환하는 것 +
+Current time: {currentTime}
`, + `Random number: {randomNumber}
`, + `리렌더링이 발생하는 경우:
+주의:
++ 리렌더링이 발생한다고 해서 항상 DOM이 업데이트되는 것은 아님 +
++ 리액트는 Virtual DOM을 사용하여 실제로 변경된 부분만 실제 + DOM에 반영 +
++ 함수 컴포넌트에서 상태와 생명주기 기능을 사용할 수 있게 해주는 + 기능 +
+
+ 리액트가 제공하는 대표적인 훅:
+ Custom Hook도 만들 수 있다. 이 경우 상태 업데이트 로직을 + 재사용할 수 있음 +
+Rules of Hooks
++ 앞서, 리액트는{' '} + 상태가 변경되면 모두 날리고 다시 그린다고 했음 +
++ 그러면 리액트를 만든 사람 입장에서, 최상단 컴포넌트의 상태가 + 바뀌면 모든 element 를 날리고 다시 만들어야 하나? +
+이런 식으로 하면 성능이 매우매우 나쁠 것이다
++ DOM API는 실제 브라우저의 렌더링 엔진과 직접 상호작용하기 + 때문에 상대적으로 느린 작업 +
+따라서 DOM API를 너무 자주 많이 호출하면 매우 느리다
+그래서 리액트는 Virtual DOM이라는 개념을 도입
+흔한 오해: Virtual DOM을 이용하면 성능이 높다
+
+ React 가 워낙 무식하게 다 부수려고 하니 Virtual DOM을 통해 겨우
+ 최적화해 둔 것이지,
+
+ Virtual DOM을 쓰면 성능이 높아진다는 것이 아님
+
+ 당연히 Virtual DOM은 JavaScript를 한 번 더 거치는 것이기 때문에, + 더 느리면 느렸지 더 빠를 수가 없다 +
+- 우리는 TypeScript로 시작할 거고, 그것도 React 에서 자주 쓰는 - TypeScript 문법에 익숙해져야 하는 것이기에 JavaScript를 너무 - 깊게 보진 않겠습니다 -
+JavaScript 문법은 대부분 안다고 가정합니다.
이미 JavaScript 를 할 줄 아시는 분들을 위해 조금 스포하자면,
- 물론 JavaScript를 잘 하는 것은 프론트엔드 개발자에게 너무나도
- 중요하고 기본적인 소양입니다. 세미나 시간이 너무 짧아서
- 이번에만 포기했을 뿐
+ ,