ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. State - React 기초 | 생활코딩
    Front-end/React.js 2020. 2. 19. 22:04
    반응형

    [출처 : https://opentutorials.org]

    15-1. State 소개

    props

    : 사용자가 컴포넌트를 사용하는 입장에서 중요한 데이터    * 제품의 외부 조작 장치 (유저 인터페이스)

     

    state

    : props에 따라 내부 구현에 필요한 데이터    * 제품을 구현하기 위한 내부 조작 장치 (메커니즘)

     

    ※ 외부의 props와 내부의 state의 정보가 철저하게 분리되어야 한다.

       사용하는 쪽과 구현하는 쪽을 격리하여 양 쪽의 편의성을 도모


    15-2. State 사용

    어떤 컴포넌트가 실행될 때 render() 보다 먼저 실행되면서 그 컴포넌트를 초기화시켜주고 싶은 코드는 constructor() 안에 작성

     : 컴포넌트가 실행될 때 constructor()가 있으면 제일 먼저 실행되어 초기화를 담당한다

    class App extends Component {
      constructor(props){
        super(props);
        // state의 값을 초기화
        this.state = {
          subject : {title:'WEB', sub:'World Wide Web!'}    // subject의 props를 state화
        }
      }
      render(){
        return (
          <div className="App">
            // 초기화하려는 컴포넌트
            <Subject title={this.state.subject.title} sub={this.state.subject.sub}></Subject>  
          </div>
        )
      }
    }

    # App이 내부적으로 사용할 상태는 state라는 형태를 통해서 사용    *외부에서 알 필요가 없는 정보를 철저하게 숨기는 것이 핵심

    # 상위 컴포넌트인 App의 상태를 하위 컴포넌트에 전달하고 싶을 때    *상위 컴포넌트의 state 값을 하위 컴포넌트의 props 값으로 전달


    15-3. Key

    # 상위 컴포넌트는 하위 컴포넌트가 필요로 하는 props를 어떤 형태의 state 값으로 만들어서 전달.

    class App extends Component {
      constructor(props) {
        super(props);
        this.state = {
          contents : [
          	{id:1, title:'HTML', desc:'HTML is for information},
          	{id:2, title:'CSS', desc:'CSS is for design}
          ]  
        }
      }
      rendor(){
      	return(
          <div className="App">
            <TOC data={this.state.contents}></TOC>
          </div>
        )
      }
    }

     

    # 하위 컴포넌트는 상위 컴포넌트로부터 전달 받은 props 값을 활용하여 원하는 동작을 구현한다.

    class TOC extends Component{
      rendor(){
        var list = [];
        var 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>      
        );
      }
    }

     

    # 여러 개의 element를 자동으로 생성하는 경우에는 각 각의 element는 'key' 라는 props를 가져야 한다.

       ex) <li key={data[i].id}>    * data[i].id : 각 각의 element와 구분할 수 있는 식별자.

    반응형

    댓글

Luster Sun