// props라는 입력을 받음
// 화면에 어떻게 표현되는지를 기술하는 React 엘리먼츠를 반환(return)
function Welcome(props-input) {
return <h1>Hello, {props.name}</h1>;-output
}
// 훨씬 쉬운 표현을 해보면 아래와 같다.
function App () {
return <div>hello</div>
}
// 이런게 있다 정도로 참고만 하기
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
React에서 말하는 Component는 함수를 말한다.
Component를 만드는 것은 html(JSX)을 return하는 함수를 만들면 된다.
// 내가 필요한 파일을 import를 사용해 가져오기
// im : 안쪽 + port : 항구 = 안쪽 항구로 들여온다(수입)
import "App.css";
function App() {
// 아래부터는 자바스크립트를 쓸 수 있는 영역 (function 아래, return 위에)
return (
// html처럼 생긴 부분을 작성하는 곳 - JSX문법(JavaScript + XML - HTML)
// JSX 문법에서 자바스크립트를 사용하려면 {} 안에 작성할 수 있다.
<div className="App">
<header className='App-header'>
<img src={logo} className='App-logo' alt='logo' />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className='App-link'
href='https://reactjs.org'
target='_blank'
rel='noopener noreferrer'
>
Lean React
</a>
</header>
</div>
);
}
// 내가 만든 컴포넌트를 export default를 사용하여 밖으로 내보내기
// ex(out) : 바깥쪽 + port : 항구 = 바깥쪽 항구로 내보낸다(수출)
export default App;
※ 컴포넌트를 만들 때 반드시 가장 첫 글자는 대문자로 만들어야한다.
- 폴더 : 소문자로 시작하는 카멜케이스로 작성
- 컴포넌트를 만드는 파일 : 대문자로 시작하는 카멜케이스로 작성
// src/App.js
import React from "react";
// 원래는 이렇게 되어있던 것을 부모 자식 컴포넌트로 빼놓은 형태가 아래의 형태
function App() {
return <div>나는 자식입니다.</div>;
}
// App 파일에 품어지는 자식 컴포넌트 Child 파일
function Child() {
// return 뒤에 붙는 반환값이 한줄이면 괄호 생략가능
return <div>나는 자식입니다.</div>;
}
// 주가 되는 파일 - Child 컴포넌트를 품고 있는 부모 컴포넌트 App 파일
function App() {
// Child 컴포넌트를 품고 있음
return <Child />;
}
// 밖으로 내보내는 App.js 파일
export default App;
- 리팩토링 진행
코드가 길어지면 일정 로직을 따로 떼어서 컴포넌트화 시켜 사용하게 되는데, 반복되는 로직이 생길 경우 효율적으로 사용할 수 있다.
import React from "react";
function App() {
// return문 뒤에 멀티라인으로 붙을 경우 소괄호 안에 꼭 넣어줘야한다.
return (
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
);
// 이렇게 만들면 오류! -> return문의 가장 상단에는 태그가 하나만 들어올 수 있다.
}
// 5개의 div를 하나의 div 태그로 묶어주거나
function App() {
return (
<div>
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
</div>
);
// 빈 태그로도 묶어줄 수 있다. -> 크롬브라우저 안에서 해석은 따로 되지 않음
function App() {
return (
<>
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
<div>나는 자식입니다.</div>;
</>
);
export default App;
import React from "react";
function Child() {
return <div>나는 자식입니다.</div>;
}
function App() {
return
<>
// 나중에는 이 부분도 JS로 5번 출력해주는 형식으로 작성할 수 있다.
<Child />;
<Child />;
<Child />;
<Child />;
<Child />;
</>
}
export default App;
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// 아래 같은 HTML 태그는 .js 파일 안에서 쓸 수 없다.
<div>
<h1>안녕하세요!</h1>
<p>시작이 반이다!</p>
</div>
// 그래서 나온 게 JSX
// 자바스크립트 안에서 html 태그같은 마크업을 넣어 뷰(UI) 작업을 편하게 할 수 있음
const start_half = <div>
<h1>안녕하세요!</h1>
<p>시작이 반이다!</p>
</div>;
import React from 'react'
function App() {
return (
<div>App</div>
)
}
export default App
import React from 'react'
export default function App() {
return (
<div>App</div>
)
}
import React from 'react'
export default function App() {
// 여기에 자바스크립트 사용 가능
const a = 3;
const b = 7;
const testArr = [1, 2, 3]
// 4.return문에 멀티라인이 들어갈 경우 () 소괄호 안에 작성해야한다.
return (
// 2.return문의 최상단에는 태그가 하나만 들어올 수 있다.
<div>
// 1.닫는 태그는 무조건 있어야함
<input type='text' />
// 3.JSX 문법에서 자바스크립트를 사용하려면 {} 중괄호 안에 작성
<div>안녕하세요 {a + b}입니다.</div>;
// map 함수도 사용 가능
{testArr.map}
</div>
)
}
import React from 'react'
export default function App() {
const number = 1;
return (
// 6.JS와 달리 class를 넣으려면 className을 적어야한다.
<div className="test-class">
<p>안녕하세요 리액트입니다.</p>
{/* 5.주석은 중괄호 안에 Ctrl+/ 로 사용할 수 있다. */}
{/* 삼항연산자 사용해보기! 조건 ? 참이면 왼쪽:거짓이면 오른쪽 */}
// 7.style 안에 JS객체를 넣어줘야 한다.
<p style={// JS문법이기 때문에 첫 번째 {} 사용
{// Js 객체로 넣어야하기 때문에 두 번째 {} 사용
color: "red", // css처럼 key-value 형태로 넣어준다.
}
}>
{number > 10 ? number + '은 10보다 크다' : number + '은 10보다 작다'}
</p>
</div>
)
}
import React from 'react'
export default function App() {
const number = 1;
// 8.style을 pTagStyle 라는 변수로 선언하고
const pTagStyle = {
color: "red",
};
return (
<div className="test-class">
// 변수로 선언한 style을 중괄호 안에 넣어 사용할 수 있다.
<p style={pTagStyle}>안녕하세요 리액트입니다.</p>
// 지정한 변수로 재사용도 가능하다.
<p style={pTagStyle}>
{number > 10 ? number + '은 10보다 크다' : number + '은 10보다 작다'}
</p>
</div>
)
}
JSX에 JS가 포함되어 있어 비슷하긴 하지만 생각보다 문법이 좀 더 까다로웠다. 컴포넌트를 만들 때 첫문자는 꼭 대문자를 써야하는 것이나 JS를 사용할 때는 {}를 꼭 써줘야하는 것이나 익숙해지면 괜찮아지겠지만 현재로서는 헷갈리는 부분이 많아 JSX를 자주 사용해봐야할 필요성을 느꼈다. 아직 자바스크립트도 이해하지 못한 부분이 많지만 그래도 비슷한 부분도 있기에 같이 공부하면 더 좋을 것 같다는 생각이 들었다.