반응형

그동안 리액트를 공부하면서 느꼈던 점을 생각해보면 생각보다 어렵다는 거였다. 컴포넌트를 그리고 재사용 하기 위해서 리액트를 사용하려면 무작정 만들어서 되는것도 아니고 전체적인 구조를 생각해 가면서 만들어야 하기 때문이다. 물론 처음부터 모두 생각하고 만들수 없기 때문에 만들면서 리팩토링을 하는것이 필수이다. 하지만 언어가 갖고 있는 기능만 알고 있다고 해서 해결될 문제는 아니다. 무엇보다도 무언가를 만들어보면서 느낄수 있는 것들이 있기 때문이다.

이런 이유에서 이 책은 리액트를 공부한 사람들에게 프로젝트를 따라 해보면서 기능들을 활용해 볼 수 있는 좋은 참고서가 될 수 있다. (기본적인 지식은 반드시 알고 있어야 한다.)

무언가를 하나 만들려면 하루 아침에 뚝딱 만들어지는 것은 아니다. 먼저 생각해야 할 것들이 있고 만들면서 생각해야 되는 것들이 있다. 그런 모든 과정이 이책에 있는 프로젝트를 따라 만들면서 경험해 볼 수 있다. 공통 기능을 만드는 시점, 비지니스 기능을 만드는 시점등 각각의 단계에서 필요한 기능과 주의 사항들을 알아 볼 수 있다.

이 책에서는 계산기, Todo 리스트, 여행사진 공유앱 이렇게 3가지를 만들게 된다. 3가지밖에 안된다고 생각할 수도 있지만 책 두께를 보면 그런 생각이 안들것이다. ^^;; 900 페이지가 되는 이 책에는 그만큼 많은 내용들이 담겨 있으니 시간을 갖고 천천히 따라해보면서 익히면 리액트 지식을 습득하는데 많은 도움이 될 것이다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형
반응형

edX사이트에서 Introduction to ReactJS 강의를 들으면서 정리한 내용입니다. 

 

2018/04/18 - [Development/React] - edX - Introduction to ReactJS Module1 내용정리

 

 

Class Components

- Class Component

Class Component 는 Functional Component 와 다르게 React Component 가 라이프사이클 메소드(Life Cycle method) 와 상태(state) 를 가질수 있도록 해준다. Class Component는 this.state, this.props 를 가지고 있다. 

 

1
2
3
4
5
class Welcome extends React.Component{
    render(){
        return <h1>Hello World!</h1>
    }
}
cs

 

- Render()

render() 메소드는 Class Component 에서 React Element를 리턴할때 사용된다.

 

- Adding properties to Class Components

Class Component의 property는 this.props 를 통해서 접근가능하다. 

 

1
2
3
4
5
class Welcome extends React.Component{
    render(){
        return <h1>Message: {this.props.message}</h1>
    }
}
cs

 

1
<Welcome message="Hello World!"/>
cs

 

State

- Constructor(props)

constructor() 메소드는 React Component 가 mount 되기 전에 호출되며 component의 기본 상태를 설정하는데 사용된다. 

constructor() 메소드 시작에 super(props)를 호출하는것은 중요하다. 안할 경우 this.props 가 정상적으로 동작하지 않을 수 있다. 

constructor() 메소드의 첫번째 파라메터는 component에 전달되는 속성을 나타낸다. 

 

1
2
3
4
5
6
7
8
class Counter extends React.Component{
    constructor(props){
        super(props)
    }
    render(){
        return <div>Hello World!</div>
    }
}
cs

 

- Adding an initial state to Class Component

Class Component 의 state 는 반드시 object 형태로 선언되어야 한다. 

 

1
2
3
4
5
6
7
8
9
class Counter extends React.Component{
    constructor(props){
        super(props)
        this.state = {foo:123,bar:456}
    }
    render(){
        return <div>foo:{this.state.foo} bar:{this.state.bar}</div>
    }
}
cs

 

- Updating State

setState(updater, [callback]) 을 통해서 상태 업데이트가 가능하다. 상태를 업데이트 하는 것은 비동기식이기 때문에 옵션으로 callback 메소드를 호출하게 할수있다. callback 메소드는 업데이트가 완료되면 호출된다. 

setState 메소드는 component life cycle의 updating 단계를 시작하는 트리거가된다. 이것 때문에 sshouldComponentUpdate() 메소드가 false를 리턴하지 않으면 component가 다시 렌더링 된다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Counter extends React.Component{
    constructor(props){
        super(props)
        //initial state set up
        this.state = {message:"initial message"}
    }
    componentDidMount(){
        //updating state
        this.setState({message:"new message"})
    }
    render(){
        return <div>Message:{this.state.message}</div>
    }
}
cs

 

- Updating state based on previous state

setState() 메소드는 Component의 상태를 즉시 업데이트 하지 않고 큐에 넣어둔 후 나중에 진행된다. 렌더링을 좀더 효율적으로 하기위해서 batch형태로 업데이트 한다. 

아래 소스에서 setState 메소드를 여러번 호출하지만 state value 는 1만 증가한다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Counter extends React.Component{
    constructor(props){
        super(props)
        //initial state set up
        this.state = {value:0}
    }
    componentDidMount(){
        //updating state
        this.setState({value:this.state.value+1})
        this.setState({value:this.state.value+1})
        this.setState({value:this.state.value+1})
        this.setState({value:this.state.value+1})
    }
    render(){
        return <div>Message:{this.state.message}</div>
    }
}
cs

 

setState() 메소드는 첫번재 파라메터로 메소드를 사용할수 있으며 기존 상태와 설정을 넘겨준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Counter extends React.Component{
    constructor(props){
        super(props)
        //initial state set up
        this.state = {message:"initial message"}
    }
    componentDidMount()
        //updating state
        this.setState((prevState, props) => {
            return {message: prevState.message + '!'}
        })
    }
    render(){
        return <div>Message:{this.state.message}</div>
    }
}
cs

 

- State is not mutable

State 는 오직 읽기만 가능하기 때문에 임의로 변경해서는 안된다. 

 

Life Cycle Methods

- Mounting Phase Methods

mounting 단계는 component가 생성되거나 DOM 에 렌더링할때 시작된다. 

  • constructor(props) : component 가 처음 초기화할때 오직 한번만 호출된다.
  • componentWillMount() : component 가 mount 하려고 할때 호출된다.
  • render() : component가 렌더링 할때 호출된다.
  • componentDidMount() : component 가 mount 된 후에 호출된다.

- Updating Phase Methods

updating 단계는 component state 또는 properties 가 변경될때 시작된다.

  • componentWillReceiveProps(nextProps) : component 가 update  되고 새로운 props를 받았을때 호출된다.
  • shouldComponentUpdate(nextProps, nextState) : 새로은 props는 받고 update 하려고 할때 호출된다. 이 메소드가 false 이면 componentWillUpdate(), render(),  componentDidUpdate() 는 실행되지 않는다.
  • componentWillUpdate(nextProps, nextState) : update 될때 호출된다. 
  • render()
  • componentDidUpdate(prevProps, prevState) : update  끝나고 호출된다.

- Unmounting Phase Methods

unmounting 단계는 component 가 DOM 에서 제거될때 시작된다. 

  • componentWillUnmount() : component 가 unmount 되고 즉시 호출된다. 

 

Event Handlers

- Adding Event Handlers

React 와 HTML 에서의 이벤트 핸들러 차이

  • React 에서는 JSX {} 을 사용해서 정의한다.
  • React 에서는 이벤트 이름을 쓸때 camelCase 를 사용한다. 
1
2
3
4
5
React
<button onClick = {clickHandler} >Click Me</button>
 
HTML
<button onclick = "clickHandler()" >Click Me</button>
cs

 

- Binding Event Handlers to Claas Component

이벤트 핸들러는 Class Component 내부에 정의 해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Counter extends React.Component{
    constructor(props){
        super(props)
        this.state = {count:0}
        //binding is necessary to make `this` point to the correct object
        this.clickHandler = this.clickHandler.bind(this)
    }
    clickHandler(){
      //increments the count of the state
      this.setState((prevState,props) => {
        return {count: prevState.count + 1}
      })
    }
    render(){
        //renders a button that displays the state count
        return <button onClick = {this.clickHandler}>{this.state.count}</button>
    }
}
 
ReactDOM.render(
  <Counter/>,
  document.getElementById("root")
)
cs

 

 

728x90
반응형
반응형

- React는 UI를 만들기 위한 라이브러리이다. framework 가 아니다. 


- React는 Virtual DOM 을 사용한다. 그래서 Virtual DOM의 전후 상태를 비교해서 변경된 부분만 새로 반영한다. 


- 현재 facebook 에서 라이브러리 관리를 하고 있어서 한동안 없어질 일은 없다. 


https://facebook.github.io/react/






728x90
반응형

'Development > Frontend skills' 카테고리의 다른 글

map() 메소드 사용  (0) 2017.01.16
React 에서 props 사용  (0) 2017.01.09
Mac 에서 Node.js 설치  (0) 2017.01.05
jquery radio button 속성 설정  (0) 2013.09.04
JavaScript 객체 변환 toJSON  (0) 2013.05.10

+ Recent posts