Props 는 컴포넌트 **외부**에서 컴포넌트에게 주는 데이터.
State 는 컴포넌트 **내부**에서 변경할 수 있는 데이터.
둘 다 변경이 발생하면, Render가 다시 일어날 수 있다.
Render 함수
props와 state 를 바탕으로 컴포넌트를 그려낸다.
props와 state가 변경되면, 컴포넌트를 다시 그려낸다.
컴포넌트를 그리는 방법을 기술하는 함수가 Render 함수이다.
// props 는 객체 { message: '안녕하세요!!' }
function Component(props) {
	return (
		<div>
			<h1>{props.message} 이것은 함수로 만든 컴포넌트 입니다.</h1>
    </div>
  );
};

// 함수 and Class 모두 사용 가능한 방법. default 값을 지정해준다.
Component.defaultProps = {
	message: "기본값!!!!",
}

ReactDOM.render(<Component message="안녕하세요!!"/>, document.querySelector('#root'));
class Component extends React.Component {
	render() {
	  return (
	    <div>
	      <h1>{this.props.message} 이것은 Class로 만든 컴포넌트 입니다.</h1>
      </div>
		 )
    }
		// class 에서만 사용 가능한 방법이다.
    static defaultProps = {          
	    message: "기본값",
	}
}

ReactDOM.render(<Component />, document.querySelector('#root'));
// Hook 을 배우면 함수 컴포넌트에서도 state를 사용 할 수 있다. 현재 배운거까지는 class에서만
		class MyComponent extends React.Component {
      // state 방법 1
      // state = {
      //   count: 0,
      // }
      // state 방법2
      constructor(props) {
        super(props);
        this.state = { count : 0 };
      }

      render() {
        return (          
          <h1>
            {this.props.message}
            <div>{this.state.count}</div>
          </h1>
        )
      }

      componentDidMount() {
        setTimeout(() => {
          this.setState({
            count : this.state.count + 1,
          })
        }, 1000);
      }

      static defaultProps = {
        message: "이 부분을 채워주세요!",
      }
    }

    ReactDOM.render(<MyComponent />, document.querySelector('#root'));
위 코드에서 setState 는 다음과 같이도 바꿀수 있다.
위 코드 방식은 객체를 새로 만들어서 넣어주는 방식

			componentDidMount() {
        setTimeout(() => {
          this.setState(previousState => {
            const newState = { count: previousState.count + 1 }
            return newState;
          });
        }, 1000)
      }

현재 방법은 앞의 값을 이용해서 넘겨준다.

**결국 Props, State 가 바뀌면 다시 Render 되는 것이다.**