사실 자바스크립트만 조금 공부해본지라 라이브러리, 프레임워크.. 이름만 들어봤지 무엇인지 잘 몰랐다.
간단하게 특정 언어를 기반으로 하는 쓸만한 도구정도로 알고 있었는데
조은님의 특강을 듣고 리액트는 꼭 배워둬야 겠다는 생각이 들었고 리액트에 노베이스인 상태로 멋사 리액트 스터디에 가입하게 됐다.
오늘 스터디 일정도 정하고 분량도 정했는데 열심히 해야겠다는 생각뿐이었지 왜 리액트를 배우고 써야하는지 리액트가 라이브러리인지? 프레임워크인지? 이걸 쓰면 어떤 이득이 있는지 등 정작 베이스로 깔고 가야할 것들을 생각해보지 않았다.
블로그들을 탐색해서 프레임워크의 사용 이유에 대해 알아보았는데
The choice of a front-end technology doesn’t depend on the features you want to provide to your user, but on the user experience you want him/her to have
아니오
이고 사용자 경험(UX)에 초점을 맞추면 대답은 예
라는 것이다.Products that provide great user experience (e.g., the iPhone) are thus designed with not only the product’s consumption or use in mind but also the entire process of acquiring, owning and even troubleshooting it.
제품의 소비 또는 사용뿐만 아니라 구매, 소유 및 문제 해결의 전체 프로세스를 염두에 두고 설계하는 방식?
도널드 노만이라는 분이 만든 디자인 개념이다.
사용 가능한 제품을 만드는 데에만 집중하지 않는다.
즐거움, 효율성 및 재미와 같은 사용자 경험의 다른 측면에도 집중한다.
따라서 좋은 사용자 경험에 대한 단일 정의는 없고
대신, 좋은 사용자 경험은 특정 사용자가 제품을 사용하는 특정 컨텍스트에서 특정 사용자의 요구를 충족시키는 것이다.
What is User Experience (UX) Design? | Interaction Design Foundation (IxDF)
😅 한번에 이해하기엔 꽤나 모호한 개념이다.. 이분이 내신 디자인 책이 많던데 조은님이 추천해주신 블로그에 있는 목록을 참고해서 한권 읽어봐야할듯
A JavaScript library for building user interfaces
- React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes.
React는 상호작용이 많은 UI를 만들 때 생기는 어려움을 줄여줍니다. 애플리케이션의 각 상태에 대한 간단한 뷰만 설계하세요. 그럼 React는 데이터가 변경됨에 따라 적절한 컴포넌트만 효율적으로 갱신하고 렌더링 합니다.
선언형 뷰는 코드를 예측 가능하고 디버그하기 쉽게 만들어 줍니다.
✔️ 사용자 입장에서 데이터가 변할 때 페이지 리로딩이 일어나지 않기 때문에 UX가 더욱 향상되는 UX적 이득이 있기 때문에 리액트를 사용하는 것.
➡️ 그래서 SPA(Single Page Application)라고 할 수 있는 것.
✔️ 개발자 입장에서도 컴포넌트 기반의 React를 사용할 경우 코드의 가독성과 재사용성 그리고 유지보수가 편하다.
위의 장점을 가진 비슷한 역할의 프레임워크들이 있음에도 리액트가 대세가 되었는데
그 이유는
제로초님 리액트 강좌 : 리액트 사용의 이유!
출처 : React
React를 사용하는 이유
Do We Really Need a Front-end Framework? | by Alexandre Lombard | The Startup | Medium
공식문서를 보고 그 순서 그대로 npx 명령어를 통해 설치했다.
npm start
명령어 입력시 페이지에 접근할 수 없는 에러가 있었고 에러 내용은 다음과 같았다.
Error: error:0308010C:digital envelope routines::unsupported
정확한 근거는 모르지만 위의 에러 내용을 스택오버플로우에 있는 답변을 통해 해결했음.
node.js - Error message "error:0308010C:digital envelope routines::unsupported" - Stack Overflow
✔️ JSX === JavaScript eXtension
JSX
는 자바스크립트의 확장 문법이며 XML과 생김새가 유사하다.
function App() {
return (
<div>
Hi! <strong>React!</strong>
</div>
)
}
➡️ 위의 코드는 바벨을 통해 아래와 같이 변환된다.
function App() {
return React.createElement("div", null, "Hi!", React.createElement("strong", null "React!"));
}
➡️ 컴포넌트를 렌더링 할 때 마다 위와 같이 React.createElement 함수를 사용해야 하는 것은 힘들다. JSX를 사용하면 간편하게 UI를 렌더링 할 수 있다.
const myVehicle = {
type: <li>BMW 3 Series Sedan</li>,
fuel: <li>Gasoline</li>,
displacement: <li className="list-item">1995 ~ 2998cc</li>,
}
<input>
이나 <br>
을 사용할 때 닫지 않는 경우가 있는데 React 에서는 반드시 클로징 태그를 사용해서 닫아줘야 함.)import React, {Component} from 'react';
class App extends Component {
render() {
return (
<div>
<input type="text">
</div>
);
}
}
export default App;
<input> => <input />
<div></div> => <div />
import React, {Component} from 'react';
class App extends Component {
render() {
return (
<div></div>
<div></div>
<div></div>
<div></div>
);
}
}
export default App;
➡️ 그래서 반드시 div
나 Fragment
로 감싸진 형태여야 한다.
import React, {Component} from 'react';
class App extends Component {
render() {
return (
<Fragment>
<div></div>
<div></div>
<div></div>
<div></div>
</Fragment>
);
}
}
export default App;
import React, {Component, Fragment} from 'react';
class App extends Component {
render() {
const type = 'BMW 3 Series Sedan';
const fuel = 'Gasoline';
const displacement = '1995 ~ 2998cc';
return (
<Fragment>
<div>{type}</div>
<div>{fuel}</div>
<div>{displacement}</div>
</Fragment>
);
}
}
export default App;
import React from 'react';
function App() {
const car = 'BMW 3 Series Sedan';
return (
<div>
{car === 'BMW 3 Series Sedan' ? (<h1>This is my car</h1>) : (<h2>This isn't my car</h2>)}
</div>
);
}
export default App;
import React from 'react';
function App() {
const car = 'Benz G-Class';
return (
<div>
{car === 'BMW 3 Series Sedan' && <h1>It's correct</h1>}
</div>
);
}
export default App;
➡️ 위 코드를 실행하면 브라우저에 아무것도 렌더링되지 않는다.
❓ &&연산자로 조건부 렌더링 할 수 있는 이유 :
const num = 0;
return num && <div>content</div>
위의 예제는 화면에 content
를 보여주는 것이 아니라 0
을 보여줌.
import React from 'react';
import './App.css';
//undefined를 렌더링 하지 않기
function App() {
const car = 'undefined';
return name;
}
export default App;
코드를 실행하면 다음과 같은 오류가 발생한다.
App(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.
어떤 값이 undefined
일 수도 있다면, OR( || )연산자를 사용하면 해당 값이 undefined
일 때 사용할 값을 지정할 수 있으므로 간단하게 오류 방지 가능하다.
import React from 'react';
import './App.css';
function App() {
const car = 'undefined';
return name || '값이 undefined 이다.';
}
export default App;
JSX 내부에서 undefined를 렌더링하는 것은 괜찮다.
import React from 'react';
import './App.css';
function App() {
const car = 'undefined';
return <div>{name}</div>;
}
export default App;
car값이 undefined일 때 보여 주고 싶은 문구가 있으면 다음과 같이 코드를 작성한다.
import React from 'react';
import './App.css';
function App() {
const car = 'undefined';
return <div>{name || 'BMW'}</div>;
}
export default App;
위에 설명한 JSX의 규칙들은 아래 출처의 블로그들에 나와 있는 내용들이다.
이 외 JSX의 특성은 공식문서에 정리되어 있다.
출처 : [React 기초] JSX란? / JSX 문법
React | JSX란? 렌더링 Rendering이란?
클래스형과 함수형 차이
Babel이란 무엇인가? — 오웬의 개발 이야기
파이팅이에요!!!