코드를 이해
import "./App.css";
function App() {
return (
<div className="App">
<header className="App-header">
<div className="greet">Hello, I'm Jetty!</div>
</header>
</div>
);
}
export default App;
수입 명세서
– 특정 파일을 로드하는 수단
– React로 만든 프로젝트의 JavaScript 파일에서 가져오기를 사용하여 다른 파일을 가져올 수 있습니다.
– 가져오기는 Node.js에서 지원하는 기능입니다. Node.js에서 패키지는 require 문으로 로드됩니다.
* Node.js – 비브라우저 환경에서 자바스크립트를 실행할 수 있는 환경
– 브라우저에서 이러한 기능을 사용하려면 번들러를 사용하십시오.

전형적인 번들러~처럼 웹팩, 소포, 브라우저화라는 도구가 있고 각 도구마다 특성이 다릅니다.
* React는 주로 webpack을 사용하고 있습니다.
번들러 도구
모듈이 import(또는 require)로 로드되면 가져온 모든 모듈을 결합하여 하나의 파일이 생성됩니다.
최적화 중에 여러 파일로 분할될 수 있음
웹팩
webpack을 사용하면 SVG 및 CSS 파일도 로드하고 사용할 수 있습니다.
웹팩에서 로더라는 함수는 파일을 로드하는 역할을 합니다.
CSS 로더 – css 파일 로딩 허용
파일 로더 – 웹폰트나 미디어 파일 로딩 가능
바벨 로더 – JavaScript 파일을 로드하는 동안 최신 JavaScript 구문으로 작성된 코드 바벨라는 도구를 사용하여 ES5 구문~에 의해 변환주다
최신 JavaScript로 작성된 코드를 변환하는 이유는 무엇입니까?
최신 JavaScript 구문을 ES5 형식으로 변환하면 이전 웹 브라우저와 호환됩니다.
현재 대부분의 웹 브라우저는 자체적으로 최신 JavaScript 구문을 직접 실행할 수 있지만
구형 웹브라우저에서는 실행되지 않으니 미리 변환을 하셔야 합니다.
반응 구성 요소에 사용 JSX 구문도 공식적인 JavaScript 구문이 아니므로 ES5 코드로 변환해야 합니다.
function App() {
return (
<div className="App">
<header className="App-header">
<div className="greet">Hello, I'm Jetty!</div>
</header>
</div>
);
}
위의 코드는 App이라는 구성 요소를 만듭니다.
function 키워드를 사용하여 구성 요소를 생성했으며 이러한 구성 요소 기능 구성요소그것은 ~라고 불린다.
프로젝트에서 구성 요소를 렌더링하면 함수가 반환하는 항목을 나타냅니다.
HTML로 작성된 것처럼 보이는 위의 코드를 JSX라고 합니다.
JSX란 무엇입니까?
JavaScript용 확장 구문이며 XML과 매우 유사합니다.
이 형식으로 작성된 코드는 브라우저에서 실행되기 전에 코드 번들링 프로세스 중에 Babel을 사용하여 일반 JavaScript와 같은 코드로 변환됩니다.
function App() {
return (
<div>
Hello <b>react</b>
</div>
);
}
변환된 코드
function App() {
return React.createElement("div", null, "Hello ", React.createElement("b", null, "react));
}
JSX의 장점
1. 보기 쉽고 친숙하다.
– JavaScript와 JSX로 작성된 코드를 비교하면 JSX를 사용하는 것이 더 읽기 쉽고 작성하기 쉽습니다.
2. 사용성 향상
– div, span 등의 HTML 태그를 사용할 수 있으며 JSX로 컴포넌트를 작성할 수 있습니다.
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
*ReactDOM.render란?
– 페이지에 컴포넌트를 렌더링하는 역할을 하며, react-dom 모듈을 가져와서 사용할 수 있습니다.
– 이 함수의 첫 번째 매개변수페이지에서 렌더링할 JSX 콘텐츠 형식으로 작성 두 번째 매개변수에 해당 JSX를 렌더링하기 위한 문서 내부의 요소설정.
*React.StrictMode 란?
– React 프로젝트에서 React의 레거시 기능을 사용하지 못하도록 하는 기능입니다.
– string refs, componentWillMount 등과 같은 이전 기능을 사용할 때 결국에는 완전히 사라질 경고를 발행합니다.
JSX 구문 – 규칙
1. 래핑된 요소
구성 요소에 여러 요소가 있는 경우 하나의 상위 요소로 래핑해야 합니다.
function App() {
return (
<div>
<h1>안녕 리액트</h1>
<h2>JSX도 안녕</h2>
</div>
);
};
export default App;
* 위 코드에서 div로 둘러싸여 있는데 div 태그가 없으면 h1, h2에 부모 요소가 없기 때문에 오류가 발생합니다.
* Virtual DOM에서 컴포넌트의 변화를 감지할 때 효율적으로 비교할 수 있도록 컴포넌트 내부는 하나의 DOM 트리 구조로 구성되어야 한다는 규칙이 있기 때문입니다.
import { Fragment } from 'react';
function App() {
return (
<Fragment>
<h1>안녕 리액트</h1>
<h2>JSX도 안녕</h2>
</Fragment>
);
};
export default App;
React v16 이상부터 Fragment라는 기능이 도입되어 div 태그를 사용하는 대신 사용할 수 있습니다.
다음과 같은 형태로도 표현할 수 있습니다.
function App() {
return (
<>
<h1>안녕 리액트</h1>
<h2>JSX도 안녕</h2>
</>
);
};
export default App;
2. 자바스크립트 표현
JSX 내에서 JavaScript 표현식을 사용할 수 있습니다.
JSX 내부에서 코드를 { }로 래핑하여 사용합니다.
function App() {
const name = "Jetty";
return (
<>
<div>Hello, I'm {name}!</div>
<div>React & JSX</div>
</>
);
}
export default App;
3. if 문 대신 조건부 연산자
JSX 내부의 JavaScript 표현식에는 if 문을 사용할 수 없습니다.
조건문을 사용하려면 { } 안에 조건 연산자(삼항 연산자)를 사용합니다.
만약 사실이라면
function App() {
const name = "Jetty";
return (
<>
<h1>Hello</h1>
<div>
{name === "Jetty" ?
<div>I'm {name}!</div>
:
<div>React & JSX</div>}
</div>
</>
);
}
export default App;
결과 값

거짓이면
function App() {
const name = "Coke";
return (
<>
<h1>Hello</h1>
<div>
{name === "Jetty" ?
<div>I'm {name}!</div>
:
<div>React & JSX</div>}
</div>
</>
);
}
export default App;

4. AND 연산자(&&)를 사용한 조건부 렌더링
조건 연산자는 특정 조건이 충족될 때 콘텐츠를 표시하고 충족되지 않을 때 아무 것도 렌더링하지 않는 데 사용할 수 있습니다.
function App() {
const name = "Coke";
return (
<>
<h1>Hello</h1>
<div>{name === "Jetty" ? <div>I'm {name}!</div> : null}</div>
</>
);
}
export default App;
* 렌더링 null은 아무것도 표시하지 않습니다.
&& 연산자를 사용한 조건부 렌더링
function App() {
const name = "Jetty";
return (
<>
<h1>Hello</h1>
<div>{name === "Jetty" && <div>I'm {name}!</div>}</div>
</>
);
}
export default App;
* false인 경우 렌더링이 되지 않습니다.
* 예외적으로 거짓된 값이 0이면 0이 출력됩니다.
5. 정의되지 않은 렌더링하지 않기
React 구성 요소에서 함수가 정의되지 않은 값만 반환하고 렌더링하는 상황을 만들어서는 안 됩니다. – 에러 발생됨
function App() {
const name = undefined;
return name;
}
export default App;
위와 같이 정의되지 않을 수 있는 상황을 방지하기 위해 OR(||) 연산자를 사용하여 오류를 방지합니다.
function App() {
const name = undefined;
return name || "값이 undefined 입니다";
}
export default App;
결과 화면

6. 인라인 스타일링
React에서 DOM 요소에 스타일을 적용할 때 문자열이 아닌 객체 형태로 넣어야 합니다.
스타일 이름 중 배경색과 같이 – 문자가 포함된 이름은 – 문자를 제거합니다. 캬멜 표기(camelCase)다음과 같이 작성해야 합니다.
배경색 => 배경색
function App() {
const name = "Jetty";
const style = {
backgroundColor: "black",
color: "aqua",
fontSzie: "48px",
fontWeight: "bold",
padding: 16,
};
return <div style={style}>{name}</div>;
}
export default App;
결과 화면

7. 클래스 대신 클래스 이름
클래스가 아닌 클래스를 지정할 때 클래스 이름로 설정해야 합니다
function App() {
return <div className="react">리액트</div>;
}
export default App;
값을 *className이 아닌 class로 설정해도 여전히 스타일이 적용되지만 브라우저 개발자 도구의 콘솔 탭에 경고가 표시됩니다.
8. 닫아야 하는 태그
HTML 코드를 작성할 때 태그를 닫지 않으면 오류가 발생합니다.
function App() {
return (
<>
<div className="react">리액트</div>
<input>
</>
);
}
export default App;
위와 같이 입력 태그가 닫히지 않으면 오류가 발생합니다.
9. 주석
JavaScript 표현식 내부에서 /* */를 사용하여 JSX에서 주석을 작성합니다.
=> {/* … */}
function App() {
return (
<>
<div className="react">리액트</div>
{/* <div>주석 처리된 내용</div> */}
<div>// 주석처리 되지 않은 내용 </div>
<div>/* 주석처리 되지 않은 내용 */</div>
</>
);
}
export default App;
결과 화면

정리하다
JSX는 HTML과 유사하지만 완전히 동일하지는 않습니다.
코드를 보면 XML 형식이지만 실제로는 자바스크립트 객체사용법이 다르고 문법도 약간 다릅니다.