ReactDOM.render(
<React.StrictMode>
<App />
// 사용자 정의 component 모음 -> 실제 구현은 App.js 에서 이루어진다
</React.StrictMode>,
document.getElementById('root')
// index.html id='root' div 내용을 받는다
);
import
컴포넌트이름 from
파일이름(확장자명 생략 가능 ex) .js)import
'./App.css'import
있다면 App이라는 디자인을 넣는다고 생각하면 된다import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class Subject extends Component {
render(){ // function 붙지만 클래스 함수안에서는 생략 가능
return (
// 컴포넌트를 만들때는 하나의 최상위 태그로만 시작해야한다
<header>
<h1>WEB</h1>
world wide web!
</header>
);
}
}
class Content extends Component{
render(){
return(
<article>
<h2>HTML</h2>
HTML is HyperText Markup Language.
</article>
);
}
}
class TOC extends Component{
render(){
return(
<nav>
<ul>
<li><a href="1.html">HTML</a></li>
<li><a href="2.html">CSS</a></li>
<li><a href="3.html">Javascript</a></li>
</ul>
</nav>
);
}
}
// 컴포넌트를 만드는 코드
class App extends Component{
// 'react' 가 가진 Component 를 상속해서 App 이라는 새로운 클래스를 만드는 것이다
// 그 새로운 클래스에 render 라는 메소드가 존재한다
render(){
return(
<div className="App">
<Subject></Subject>
<TOC></TOC>
<Content></Content>
</div>
);
}
}
// 해당 코드는 유사 자바스크립트 이다(자바스크립트가 아니다)
// html tag 문법에 맞게 사용하는 것이 아닌 그대로 가져다 쓴다
// 페이스북에서 만든 jsx 언어로 이용해 코드작성하면 create-react-app 으로 js 으로 변경해준다
export default App;
class Subject extends Component {
render(){
return (
<header>
<h1>{this.props.title}</h1>
{this.props.sub}
</header>
);
}
}
class App extends Component{
render(){
return(
<div className="App">
<Subject title = 'WEB' sub='world wide web!'></Subject>
<TOC></TOC>
<Content></Content>
</div>
);
}
}
컴포넌트의 기본적인 동작을 바꾸고 싶을 때
사용자에게 props를 제공하고 component 조작 가능
component 내부적으로 사용하는 것들이 state
철저하게 격리시켜 양쪽의 편의성에 모두 도모하는 것
class App extends Component{
constructor(props){ // 초기화를 담당
super(props);
this.state ={
subject:{title:'WEB', sub:'world wid web'}
}
}
render(){
return(
<div className="App">
<Subject
title = {this.state.subject.title} // this 활용
sub={this.state.subject.sub}>
</Subject>
<TOC></TOC>
<Content title='HTML' desc='HTML is HyperText Markup Language.'></Content>
</div>
);
}