[ReactJS] state / props

2019. 5. 19. 21:49ReactJS

this.state를 사용하면 Component의 render()에 데이터를 전달할 수 있습니다. 

 

this.props :

- 부모에서 전달되는 읽기 전용 데이터 (상수처럼 사용)

- 자식에서 변경 불가! 데이터 값을 변경할 수 없다

 

this.state

- Component의 private데이터를 저장하고(클래스 내에서만 접근 가능한) Component에 의해 변경 가능.

- state가 업데이트(변경)되면 Componenet는 스스로 렌더링 작업을 한다.


주의!!

state는 업데이트 되지 않는 데이터를 가지면 안된다. 

state = { 
   isHeaderHidden : false  
   title : 'welcome this stateful component'  
} 

... 

return(
    <h1>this.state.title</h1>
) 

// state변경이 없는 데이터는 state 객체에 두지 x
state = { 
   isHeaderHidden : false  
} 

... 

return(
    <h1>'welcome this stateful component'</h1>
) 


이렇게 title프로퍼티는 변하지 않는 데이터가 상태(state)를 가지면 안된다.

그냥 JSX에 작성해주면 되는데 state에 넣을 필요가 없습니다 ㅜㅜ
state는 항상 최소한의 데이터가 남았다는 확신이 들 때까지 생각하며 데이터를 지워 UI 최신화에 힘써야 합니다.


 

아래 코드는 빈 state 객체다.

 

당연히 아래 코드는 UI변경이 없다.

Componenet의 state는 변경이 있을 시, UI를 렌더링해 항상 최신화 해야하는데 변경할 데이터가 없다.

이벤트 핸들러에 의해 변경할 데이터는 반드시! 저장해야 합니다.

// stateful한 컴포넌트 생성
class ReactClass extends React.Component {
  // state는 컴포넌트에서 변경 가능.
  state = {
    // isHeaderHidden : false
  }
  isHeaderHidden = false

  handleClick = () => {
    // this.setState(preState => ({
    //   isHeaderHidden: !preState.isHeaderHidden
    // }))
    this.isHeaderHidden = !this.isHeaderHidden
  }

  render() {
    // const { isHeaderHidden } = this.state
 
 // if(isHeaderHidden){ 가 아니라 아래 코드로 변경
    if (this.isHeaderHidden) {
      return (
        <button className="btn btn-primary" onClick={this.handleClick}>
          create
        </button>
      )
    } else {
      return (
        <Fragment>
          <h1 style={style} className="header">
            stateful react component
          </h1>
          <button className="btn btn-primary" onClick={this.handleClick}>
            delete
          </button>
        </Fragment>
      )
    }
  }
}

const reactComponent = ReactDOM.render(
  <ReactClass />, //ReactElement : 생성된 ReactNode의 root element!
  document.getElementById('react-application') //DOMElement : 해당 트리의 DOM 노드 컨테이너
)

export default ReactClass

 정리 
state 객체( state = { ... } )에 들어 있는 Component의 state 표현은 최소한으로!
state/props의 데이터에 대해서만 render() 에서 계산합니다.

Componenet의 state가 변경되면 리액트는 그 Componenet를 다시 렌더링하는 것을 항상 기억!

'ReactJS' 카테고리의 다른 글

[ReactJS] DOM Element 접근  (0) 2019.05.26
[ReactJS] React Component LifeCycle API  (0) 2019.05.20
[ReactJS] 리액트 컴포넌트, 엘리먼트  (0) 2019.05.19
[ReactJS] JSX  (0) 2019.05.19
[React] Webpack과 Babel  (0) 2019.05.18