terminal : npm install -g create-react-app
create-react-app <파일이름>
또는 npx create-react-app 파일이름
- React app start/stop (in terminal):
start : cd 프로젝트 directory
npm start (localhost:3000)
stop : control + c
프로젝트 directory
- src : 소스코드 파일들이 들어가는 폴더
- public : static 파일들 (예: 이미지 파일들) 들어가는 폴더
- node_modules : 프로젝트 dependencies
- package.json : dependecies 기록 / 설정
- package-lock.json : 설치된 dependencies 기록
- README.md
import React from 'react';
import ReactDOM from 'react-dom';
// function component
const App = () => {
return <div> Hello World! </div>;
}
// component to show on HTML
ReactDOM.render(
<App />,
document.querySelector('#root')
);
// class component
class App extends React.Component {
render() {
return <div> Hello World! </div>
ReactDOM.render(
<App />,
document.querySelector('#root')
);
//html
<div style="background-color:red;"></div>
//jsx
<div style={{backgroundColor:'red'}}></div>
// 첫번째 {}는 javascript variable라는 것을 말하고, 안에 있는 두번째 {}는 javascript object라는 것을 말한다.
const App = () => {
const buttonText = "Click";
return (
<button style={{ backgroundColor: 'red' }}>
{buttonText}
<button>
);
};
const App = () => {
const buttonText = {text: 'Click me'};
return (
<button style={{backgroundColor: 'blue', color: 'white'}}>
{buttonText}
</button> // text: 'Click me' 를 호출 할 수 없음
);
};
// buttonText 를 호출하기 위해:
<button style={{backgroundColor: 'blue', color: 'white'}}>
{buttonText.text}
</button>
//또는
const App = () => {
const buttonText = {text: 'Click me'};
const style = {backgroundColor: 'red'};
return (
<button style={style}>
{buttonText.text}
</button>
);
};
//property 중에 for 보다 htmlFor를 사용한다
<label className="label" for="name">
<label className="label" htmlFor="name">
// 새로운 js 파일을 생성, 이름은 생성하는 component의 기능을 기반으로 짓기. 예: CommentDetail.js 파일 생성
import React from "React";
import faker from "faker";
const CommentDetail = () => {
return (
<div className="comment">
<a href="/" className="avatar">
<img alt="avatar" src={faker.image.avatar()} />
</a>
<div className="contnet">
<a href="/" className="author">
Sam
</a>
<div className="metadata">
<span className="date">TOday at 6:00PM</span>
</div>
<div className="text">Nice post!</div>
</div>
</div>
);
};
// index.js 에서 호출가능하도록
export default CommentDetail;
//index.js 에서는
import React from "react";
import ReactDOM from "react-dom";
import faker from "faker";
import CommentDetail from "./CommentDetail";
const App = () => {
return (
<div className="ui container comments">
<CommentDetail />
<CommentDetail />
<CommentDetail />
</div>
);
};
//index.js (parent component)에서:
import React from "react";
import ReactDOM from "react-dom";
import faker from "faker";
import CommentDetail from "./CommentDetail";
const App = () => {
return (
<div className="ui container comments">
<CommentDetail author="Sam" />
<CommentDetail author="Alex" />
<CommentDetail author="Jane" />
</div> //author가 props
);
};
//CommentDetail.js (child component)에서
import React from "React";
import faker from "faker";
// () 안에 props 입력
const CommentDetail = (props) => {
return (
<div className="comment">
<a href="/" className="avatar">
<img alt="avatar" src={faker.image.avatar()} />
</a>
<div className="contnet">
<a href="/" className="author">
{props.author}
</a>
<div className="metadata">
<span className="date">TOday at 6:00PM</span>
</div>
<div className="text">Nice post!</div>
</div>
</div>
);
};
export default CommentDetail;
import React from "react";
import ReactDOM from "readct-dom";
// 내장 돼있는 React.Component class를 App class로 끌어온다는 뜻
class App extends React.Component {
render() {
window.navigator.geolocation.getCurrentPosition(
(position) => console.log(position), //success callback
(err) => console.log(err) //failure callback
);
return (
<div>Latitude: </div>;
);
}
}
ReactDOM.render(<App />, document.querySelector("#root"));
리액트 기초 독학은 도서로 진행하시나요?