카테고리 없음

React Props State 동작원리

Canyi 2022. 11. 16. 11:13

App.js

import './App.css';
import React, {Component} from 'react';
import Event from './Event';
import MySubject from './MySubject';
import MyContent from './MyContent';
import MyTopic from './MyTopic';

//JSX



class App extends Component{

  constructor(props){
    super(props);
    this.state = {
      mode : 'welcome',
      welcome : {title: 'welcome', desc : '반갑슴다.'},
      subject : {title: 'WEB', sub : 'World Wide Web'},
      contents : [
        {id: 1, title : 'HTML', desc: 'HTML is .....'},
        {id: 2, title : 'CSS', desc: 'CSS is .....'},
        {id: 3, title : 'JS', desc: 'JS is .....'},
      ]
    };
      
  }


  render(){
    console.log('App render');
    var _title, _desc = null;
    if(this.state.mode === 'welcome'){
      _title  = this.state.welcome.title;
      _desc = this.state.welcome.desc;
    }
    else if(this.state.mode === 'seleted') {
      _title  = this.state.contents[0].title;
      _desc = this.state.contents[0].desc;
    }
      return (
    <div className="App">
      <MySubject title = {this.state.subject.title} sub = {this.state.subject.sub}></MySubject>
      <MyTopic data = {this.state.contents}></MyTopic>
      <MyContent title = {_title} desc = {_desc}></MyContent>
    </div>
  );
  }
}

export default App;

 

MySubject.js

import React, {Component} from 'react';

class MySubject extends Component{
    render(){
    //console.log(this.props)
    console.log('MySubject render');
    return (
      <header>
          <h1>{this.props.title}</h1>
          {this.props.sub}
      </header>
    );
    }
  }


export default MySubject;

 

 

MyTopic.js

import React, {Component} from 'react';

class MyTopic extends Component{
    render(){
    //console.log(this.props);
    console.log('MyTopic render');
    var lists = [];
    var data = this.props.data;
    var i = 0;
    while(i < data.length){
      lists.push(<li key = {data[i].id}><a href={data[i].id}>{data[i].title}</a></li>)
      i = i+1;
    }
        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> */}
              {lists}
          </ul>
      </nav>
        );
      }
  }



export default MyTopic;

 

MyContent.js

import React, {Component} from 'react';

class MyContent extends Component{
    render(){
    //console.log(this.props)
    console.log('MyContent render');
        return(
          <article>
          <h2>{this.props.title}</h2>
          {this.props.desc}
        </article>
        );
      }
  }



export default MyContent;

초기페이지 

css를 클릭할 경우

js를 클릭할 경우