본문 바로가기
🖊️Programming Language/📌React

[React] State

by 빛나고요 2021. 5. 4.
BIG

Study. React

State

[State 소개]

📌state와 props의 차이점

ex) 휴대폰을 사용자의 입장과 구현하는 입장으로 생각할 때

사용자의 입장: 휴대폰 버튼들 ➠ props

구현하는 사람의 입장: 내부 구현에 필요한 데이터 ➠ state

 

📌props는 사용자에게 제공하는 외부이고 사용자가 알 필요 없는 내부에서 사용되는 것이 state

 

[State 사용]

📌App.js파일에서 아래와 같이 작성

📌state값을 초기화하여 그 값으로 title="WEB" sub="world wide web"에 들어가는 값을 세팅

📌Component가 실행될 때 render() 함수보다 먼저 실행되어 초기화시켜주고 싶은 코드를 component의 constructor안에 작성

📌아래 코드처럼 세팅

class App extends Component {
  constructor(props){
    super(props);
    this.state = {}
  }

 

📌초기화가 끝나면 state의 값을 초기화하고 state화 시키기 위해서는 아래 코드처럼 작성

constructor(props){
    super(props);
    this.state = {
      subject:{title:'WEB', sub:'World Wide Web!'}
    }
  }

 

📌그리고 <Subject> 태그 안의 요소에 있는 title과 sub의 값을 변경해주어야 하는데 title안에 WEB 대신 this.state.subject.title로 바꿔주고 ""를 남기면 props에서는 문자로 인식해버리기 때문에 ""를 빼주고 {}를 씌어주면 WEB으로 출력

<Subject title={this.state.subject.title} sub={this.state.subject.sub}></Subject>

 

📌index.js를 보면 App이라는 component를 실행하고 있는데 state라는 것을 사용하고 있는지 모르게 은닉시켜야 함

📌그래서 App이 내부에서 사용될 때는 state를 사용해야 함

📌값의 전달은 this.~~~ 사용

 

📌App.js 지금까지 전체 코드

import React, { Component } from 'react';
import TOC from "./components/TOC";
import Content from "./components/Content";
import Subject from "./components/Subject";
import Aside from "./components/Aside";
import './App.css';

class App extends Component {
  constructor(props){
    super(props);
    this.state = {
      subject:{title:'WEB', sub:'World Wide Web!'}
    }
  }
  render() {
    return (
      <div className="App">
        <Subject title={this.state.subject.title} sub={this.state.subject.sub}></Subject>
        <TOC></TOC>
        <Content title="HTML" desc="HTML is Hypertext Markup Language"></Content>
        <Aside></Aside>
      </div>
    );
  }
}
export default App;

 

[key]

📌여러 개의엘리먼트를 자동으로 생성하는 경우 console창에서 각각의 리스트 항목들은 키라는 props를 가지고 있어야 한다는 에러가 뜨는데 이때 key를 이용하여 각각의 목록을 다른 것들과 구분할  있도록 식별자를 써주어야 

 

📌App.js

import React, { Component } from 'react';
import TOC from "./components/TOC";
import Content from "./components/Content";
import Subject from "./components/Subject";
import Aside from "./components/Aside";
import './App.css';

class App extends Component {
  constructor(props){
    super(props);
    this.state = {
      subject:{title:'WEB', sub:'World Wide Web!'},
      contents:[
        {id:1, title:'HTML', desc:'HTML is for information'},
        {id:2, title:'CSS', desc:'CSS is form design'},
        {id:3, title:'JavaScript', desc:'HTML is for interactive'}
      ]
    }
  }
  render() {
    return (
      <div className="App">
        <Subject title={this.state.subject.title} 
        sub={this.state.subject.sub}></Subject>
        <TOC data={this.state.contents}></TOC>
        <Content title="HTML" desc="HTML is Hypertext Markup Language."></Content>
        <Aside></Aside>
      </div>
    );
  }
  
}
export default App;

 

📌TOC.js

import React, { Component } from 'react';

class TOC extends Component{
    render(){
      var lists = [];
      var data = this.props.data;
      var 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 = i + 1;
      }
      return(
        <nav>
              <ul>
                  {lists}
              </ul>
        </nav>
      );
    }
  }
export default TOC;

 

 

💡state 파트도 끝났다.

마지막 key 강의가 좀 이해가 안돼서 몇 번이나 다시 들어봤는데 흠,,, 이제부터 어렵기 시작하는 건가...

그래도 하띵💪

'🖊️Programming Language > 📌React' 카테고리의 다른 글

[React] Props와 State  (0) 2021.05.06
[React] 이벤트  (0) 2021.05.05
[React] 컴포넌트 제작  (0) 2021.05.04
[React] 컴포넌트 제작  (0) 2021.05.03
[React] 개발환경  (0) 2021.05.03

댓글