2020λ 09μ 01μΌ νμμΌ
Table of Contents
- κ°μ λͺ©ν π
- κ°μμμ μ£Όλ‘ λ€λ£° ν€μλ π
- Typescriptμμ νμ μ μ§μ νλ λ°©λ² π
- νμ λ³μΉ π
- κ°μ²΄ νμ π
- Typescript&React νλ‘μ νΈ μμ±νκΈ° π
- κ°λ¨ν React μ»΄ν¬λνΈ λ§λ€κΈ° π
- Babelμ ν΅ν React μ»΄ν¬λνΈ λ³ν π
- μμ±ν App μ»΄ν¬λνΈμ νμ₯ π
- μ μμ μΈ μνκ΄λ¦¬ π
- λλ μ νκ³ μλ?
- λ€νΈμνΉ
- μ½λ νμ§, μν€ν μ², μ μ κΈ°μ
λ§μ λꡬλ€μ΄ μ겨 μμ°μ±μ΄ ν₯μ λμλ€.
μ΅κ·Όμ νλ‘κ·Έλλ° νμ΅ λ°©λ²μ λꡬ
λ₯Ό νμ΅νλ μκ°μ΄ λ§λ€.
React
, Typescript
λ±μ λꡬ
λ₯Ό μ¬μ©νλ λ°©λ²μ νμ΅νλ€.
- μν (State) : μ΄ν리μΌμ΄μ μ μ¦ μνλ₯Ό κ΄λ¦¬νλ κ²μ΄ μ£Ό λͺ©ν
- νκ²½ (Env) : λ§μ νκ²½μ λν λμ λ° κ°λ° νκ²½μ λν κ΄μ¬
- μ ν (Product) : κ°λ°μ νλ κ²λΏλ§ μλλΌ μ νμ μΈ μΈ‘λ©΄μΌλ‘ μκ°
- λͺ©ν (Mission) : λ§μ λꡬλ₯Ό μ‘°ν©ν΄ λ§λλ μ νμ΄ ν΄κ²°ν λ―Έμ
- μ½λ (Quality) : μ½λμ ν리ν°λ₯Ό λμΌ μ μλ λ°©λ²
- μλμ (E=mc^2) : μμ μλ λͺ¨λ κ²μ μ¬λλ§λ€ μλμ
- νμ μΆλ‘ μ ν΅ν μμμ νμ μ§μ
let foo = 10;
μμ κ°μ΄ Javascript
μ λμΌνκ² μ½λλ₯Ό μμ±ν μ μλ€.
νμ
μΆλ‘ μ ν΅ν΄ Typescript
λν λ³λ€λ₯Έ μ€λ₯λ₯Ό λ°μμν€μ§ μλλ€.
let foo = 10;
foo = false;
νμ§λ§ μμ κ°μ΄ λ€λ₯Έ νμ
μ κ°μ λμ
ν κ²½μ° λ¬Έμ κ° λ°μνλ€.
foo
λ³μμ 10
μ΄λΌλ number
νμ
κ°μ΄ μ§μ λλ©΄μ λ€λ₯Έ νμ
μ κ°μ λμ
ν μ μλ€.
- λͺ μμ μΌλ‘ νμ μ μ§μ νλ λ²
λ³μλͺ
:νμ
κ³Ό κ°μ΄ μ¬μ©ν΄ νμ
μ λͺ
μν μ μλ€.
let foo: number = 10;
foo = false;
λ€λ₯Έ νμ
μ κ°μ λμ
ν μ νμ
μΆλ‘ μ ν΅ν νμ
μ§μ κ³Ό λμΌνκ² μ€λ₯κ° λ°μνλ€.
let age: number = 10;
let weight: number = 72;
age
μ weight
λ³μλ number
νμ
μΌλ‘ λ³ λ¬Έμ μμ΄ μ¬μ©ν μ μλ€.
νμ§λ§ μ½λμ κ°λ
μ±μ μν΄ μλμ κ°μ΄ νμ
λ³μΉμ μ΄μ©ν΄ νμ
μ μ§μ ν μ μλ€.
type Age = number;
let a: Age = 10;
λ³μ a
λ age
μ λμΌνκ² number
νμ
μ΄μ§λ§ Age
λΌλ νμ
λ³μΉμ μ¬μ©ν΄ κ°λ
μ±μ μ¦κ°μν¨λ€.
κ°μ²΄μ νμ
μ μλμ κ°μ΄ type
ν€μλλ₯Ό μ¬μ©ν΄ μ μν μ μλ€.
type Foo = {
age: number;
name: string;
}
const foo: Foo = {
age: 10,
name: "Kim,
}
Foo
κ°μ²΄ νμ
μ number
νμ
μ age
μ string
νμ
μ name
μμ±μ κ°μ§κ³ μμ΄μΌ νλ€.
κ°μ²΄ νμ
λ΄λΆ μμ±μ νμ
μ μ§μ ν λμλ νμ
λ³μΉμ λμΌνκ² μ¬μ©ν μ μλ€.
type Age = number;
type Foo = {
age: Age;
name: string;
};
κ°μ²΄ νμ
μ μ μνλ λ€λ₯Έ λ°©λ²μΌλ‘λ interface
ν€μλκ° μ‘΄μ¬νλ€.
type Age = number;
interface Bar {
age: Age;
name: string;
}
const bar: Bar = {
age: 10,
name: "Kim",
};
type
ν€μλλ‘ μ μΈν κ°μ²΄ νμ
κ³Ό λμΌνκ² interface
λ₯Ό μ΄μ©ν΄ κ°μ²΄ νμ
μ μ μΈν μ μλ€.
type
μ μ΄μ©ν νμ
μ μΈ λ°©μκ³Ό interface
λ₯Ό μ΄μ©ν νμ
μ μΈ λ°©μμ μ°¨μ΄κ° μ‘΄μ¬νλ€.
npm
ν¨ν€μ§μ create-react-app
μ μ΄μ©ν΄ κ°λ¨νκ² νλ‘μ νΈ μμ±μ ν μ μλ€.
yarn
yarn create react-app <app_name> --template typescript
npm
npm init react-app <app_name> --template typescript
npx
npx create-react-app <app_name> --template typescript
μλμ κ°μ΄ function
ν€μλλ₯Ό μ΄μ©ν΄ ν¨μ μ»΄ν¬λνΈλ₯Ό μμ±ν μ μλ€.
src/index.tsx
import React from "react";
import ReactDom from "react-dom";
function App() {
return (
<h1>Tech Hello!</h1>
);
}
ReactDom.render(
<React.StricMode>
<App/>
</React.StrictMode>,
document.getElementById("root")
)
ReactDom
μ render
ν¨μλ κ°μλμ μ»΄ν¬λνΈλ₯Ό 그리λ ν¨μμ΄λ©° λ κ°μ μΈμλ₯Ό λ°λλ€.
첫 λ²μ§ΈμΈμλ λ λλ§λ μ»΄ν¬λνΈλ©° λ λ²μ§Έ μΈμλ λ λλ§λ μ»΄ν¬λνΈλ₯Ό λ£μ HTML μμλ€.
μμ±ν App
μ»΄ν¬λνΈλ babel
μ΄λΌλ νΈλμ€νμΌλ¬λ₯Ό ν΅ν΄ μλμ κ°μ΄ λ³νλλ€.
- λ³ν μ
App
μ»΄ν¬λνΈ
function App() {
return <h1 id="header">Tech Hello!</h1>;
}
- λ³ν ν
App
μ»΄ν¬λνΈ
function App() {
return /*@__PURE__*/ React.createElement(
"h1",
{
id: "header",
},
"Hello Tech"
);
}
μμ±ν jsx
μ½λκ° μμ κ°μ΄ React
μ createElement
ν¨μλ‘ λ³νλλ€.
μλμ κ°μ΄ App
μ»΄ν¬λνΈμμ μΈλΆμμ κ°μ§κ³ μλ κ°μ νμλ‘νλ κ²½μ°κ° μκΈΈ μ μλ€.
ReactDom.render(
<React.StricMode>
<App title="Tech Hello?" color="red"/>
</React.StrictMode>,
document.getElementById("root")
)
<App title="Tech Hello?" color="red"/>
μ κ°μ΄ λμ΄κ° κ°μ κ°μ²΄ νμ
μΌλ‘ μ λ¬λλ€.
function App(props) {
return <h1 id="header">{props.title}</h1>;
}
jsx
λ΄λΆμμ Javascript
μ½λλ₯Ό μ¬μ©νκΈ° μν΄μλ {}
λ΄λΆμ μμ±νλ©΄ λλ€.
interface AppProps {
title: string;
color: string;
}
function App(props: AppProps) {
return <h1 id="header">{props.title}</h1>;
}
interface
λ₯Ό μ΄μ©ν΄ App
μ»΄ν¬λνΈκ° λ°μ μμ±μ κ°μ²΄ νμ
μΈ AppProps
λ₯Ό μ μν μ μλ€.
App
μ»΄ν¬λνΈμμ λ°μ μμ± κ°μ²΄μ νμ
μ ν¨μ μ»΄ν¬λνΈμ 맀κ°λ³μμ λͺ
μν μ μλ€.
μ μμ μΌλ‘ μνλ₯Ό κ΄λ¦¬νλ λνμ μΈ μν€ν
μ³λ‘λ Flux
μν€ν
μ³κ° μ‘΄μ¬νλ€.
μ μμ μΌλ‘ μνλ₯Ό κ΄λ¦¬νλ λͺ©μ μΌλ‘ redux
λΌλ ν¨ν€μ§κ° λνμ μΌλ‘ μ¬μ©λλ€.
redux
μ λΉμ·νκ² μ μμ μΌλ‘ μνλ₯Ό κ΄λ¦¬νλ ν¨ν€μ§λ MobX
κ° μ‘΄μ¬νλ€.
redux
μ λ€λ₯΄κ² MobX
λ κΈ°λ₯μ΄ λ§μΌλ©° λ€μν λ°©λ²μΌλ‘ μ¬μ©ν μ μλ€.
κΈ°λ₯μ΄ λ§λ€λ λ»μ μ μ°νκ² κΈ°λ₯λ€μ μ¬μ©ν μ μλ€λ μλ―Έλ₯Ό κ°μ§κ³ μλ€.
λ°λ©΄μ μ μ°νκ² κΈ°λ₯μ μ¬μ©ν μ μλ λ§νΌ κ°λ°μκ° μ€μλ₯Ό ν μ μλ μ¬μ§κ° λ§λ€.
λ°λΌμ μ€μλ₯Ό μ€μ΄κΈ° μν΄μ κΈ°μ μ μ¬μ©νκΈ° μ μν€ν
μ³ μ€κ³ λν κ΅μ₯ν μ€μνλ€.