프론트엔드/React
리액트 기초 : state
랼랼
2022. 5. 2. 22:00
1) state vs props
props는 사용자가 컴포넌트를 사용하는 입장
state 는 props의 값에 따라 내부 구현에 필요한 데이터
2) 사용
import './App.css';
import { Component } from 'react';
import Subject from './Subject';
import Toc from './Toc';
import Content from './Content';
class App extends Component {
constructor(props){
super(props);
this.state={
subject:{title:"WEB",sub:'World'}
}
}
render(){
return (
<div className="App">
<Subject title = {this.state.subject.title} sub={this.state.subject.sub}/>
<Toc/>
<Content/>
</div>
);
}
}
export default App;
생성자에서 state에 subject 내부에 title과 sub를 선언하고,
이를 Subject 컴포넌트에 전달한다.
state를 사용하면 사용자는 subject가 있는지 없는지 알 수 없게 (은닉화) 한다.
+) list 형태의 데이터도 간단하게 출력할 수 있다.
App.js
import './App.css';
import { Component } from 'react';
import Subject from './Subject';
import Toc from './Toc';
import Content from './Content';
class App extends Component {
constructor(props){
super(props);
this.state={
subject:{title:"WEB",sub:'World'},
content:[
{id:1, title : 'HTML', desc:'HTML is for infomation'},
{id:2, title : 'CSS', desc:'CSS is for design'},
{id:3, title : 'JavaScript', desc:'JavaScript is for interactive'}
]
}
}
render(){
return (
<div className="App">
<Subject title = {this.state.subject.title} sub={this.state.subject.sub}/>
<Toc data={this.state.content}/>
<Content/>
</div>
);
}
}
export default App;
Toc.js
import { Component } from 'react';
class Toc extends Component {
render(){
let lists=[];
const data = this.props.data;
let i = 0;
while(i<data.length){
lists.push(
<li key={data[i].id}><a href={"/content/"+data[i].id}>{data[i].title}</a> </li>
)
i++;
}
return (
<nav>
<ul>
{lists}
</ul>
</nav>
);
}
}
export default Toc;
반응형