JavaScript/React.js

[React.js] 컴포넌트 State

aaaahy 2023. 2. 2. 21:36

State란

컴포넌트의 기본적인 동작을 바꾸기 위해 속성인 props 이용하여 사용자가 조작할 때,

이 props값에 따른 내부의 구현에 필요한 데이터

 

→ 컴포넌트가 좋은 부품이 되기위해서는 외부의 props 와 내부의 state가 철저히 분리되어있어야 함

 

*정리

props -  사용자가 컴포넌트를 사용하는 입장에서의 데이터

state - props값에 따란 내부의 구현에 필요한 데이터

 

※ 자세한 내용 참고

https://ko.reactjs.org/docs/state-and-lifecycle.html

 

State and Lifecycle – React

A JavaScript library for building user interfaces

ko.reactjs.org

 

State 사용 예제

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>
      </div>
    );
  }
}

▷ App.js

▶ 컴포넌트가 실행될 때 가장 먼저 실행되어 초기 state를 지정하는 constructor 추가

▶ 항상 props로 기본 constructor 호출

▶ render() 메서드 안의 해당 state data로 변경하여 추가(Subject 태그)

 

State 사용 예제2

- state는 다양한 독립적인 변수 포함 가능

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:'HTML 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}>
        </Subject>
        <TOC data={this.state.contents}></TOC>
        <Content title="HTML" desc="HTML is HyperText Markup Language."></Content>
      </div>
    );
  }
}

▷ App.js

▶ 리스트 형태의 contents 를 state에 추가

▶ render() 메서드 안의 해당 state data로 변경하여 추가(TOC 태그)

 

class TOC extends Component {
    render() {
      var list = [];
      var data = this.props.data; // 내부적으로 this.props.data 값을 갖고있음
      var i = 0;
      while(i < data.length) {
        list.push(<li key={data[i].id}><a href={"/content/"+data[i].id}>{data[i].title}</a></li>);
        i = i + 1;
      }

      return (
        <nav>
              <ul>
                  {list}
              </ul>
          </nav>
      );
    }
}

▷ TOC.js

▶ 내부적으로 갖고있는 props.data 를 가져와 사용

▶ 추가적으로 key 값 입력 

 

* 생활코딩 React-15.1, React-15.2, React-15.3 강의 기반으로 작성됨

'JavaScript > React.js' 카테고리의 다른 글

[React.js] 이벤트 처리  (0) 2023.02.07
[React.js] 컴포넌트(Component) 만들기  (0) 2023.01.31