이번 시간에는 리액트의 중요한 부분 중에 하나인 state에 대해서 알아보겠습니다.
- 유동적인 데이터
- JSX 내부에 {this.state.stateName}
- 초기값 설정이 필수 ,생성자(constructor)에서 this.state = { } 으로 설정
- 값을 수정할 때에는 this.setState({...}),
랜더링 된 다음엔 this.state = 절대 사용하지 말 것
(이유는 랜더링 된 다음에 이 구문 사용을 사용하면
바뀐 부분만 업데이트 하겠다는 것을 무시하는 것이고, 성능에도 안 좋습니다.)
바로 실습을 하면서, Counter 라는 기능을 만들어 보겠습니다.
처음에는 지금까지 한 것을 복습한다는 생각으로 "React 왕초보의 count"만 출력해 보겠습니다.
지금까지와 마찬가지로 캡쳐화면은 모두 클릭하시면 원본 크기로 확인이 가능합니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfNzkg/MDAxNTEyNjU5OTM1ODA0.gjiORwd2oqlADIypd5eaGlSK27gbebdQyUxKdeFP1rgg.wpYc5NZr4v5EOHnDECgBn8X30dE8Hyi1zQ8ADULaxeIg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_12.33.35.png)
모두 잘 출력되셨죠? 이번에는 counter의 주요 기능인 숫자와 버튼을 만들어 보도록 하겠습니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMjEw/MDAxNTEyNjYwMzQxMDg1.ZSs-xBusnLSZC7qeTfirU_WkBX1YvUiQNlImf-9Snasg.WnU2z86t1qHOF622W5KM5oHZoLvjdNKMhHcBoV38g2cg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_12.34.38.png)
분명히 맞게 코드를 입력한 것 같은데 흰색 화면에 아무 것도 출력이 되지 않습니다.
그 이유는 화면을 위로 올려서 처음에 배웠던 내용을 보시면 답이 있습니다.
초기값 설정을 해주지 않은 이유 때문입니다.
그럼 초기값을 설정을 해보도록 하겠습니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMzAg/MDAxNTEyNjYwNjM5MjEx.BtfSIm1fydIuEAO5G3KDyc5sqjr_wa1QHtJcKCLX1qUg.EvLXxWbhYAV-C5czoKz1XISLaw9pnvZrjLtl1f6bHssg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_12.35.46.png)
빨간 네모 박스 안에 초기값을 설정해주니 위와 같이 숫자0 과 버튼이 생겼습니다.
constructor의 메소드는 props 입니다.
super(props)를 먼저 실행해줘야 이 메소드 안에서 this.state라던지 props라던지 접근 할 수 있습니다.
이제 버튼이 클릭 될 때 실행될 메소드를 만들어 보겠습니다.
아래 빨간 네모창과 빨간 줄 부분을 추가해 보겠습니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMTU1/MDAxNTEyNjYxMDE4MjIw.1m_q40pU3SoRzlhKhtj0hTBRdI8FyxS3ZkL8jKxFYpkg.PhDHeaRwnVoKTcV7jzv6A_mdzZHC_B2YErfFXevqMs0g.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_12.39.36.png)
코드를 잘 작성한 후에 아래 버튼을 클릭해봤는데 아무 반응이 없습니다.
그래서 개발자 도구를 통해서 이유가 뭔지 살펴보겠습니다.
개발자 도구 단축키를 클릭해봤는데 안되서 저는 수동으로 직접 선택하였습니다.
아래 화면을 참고하세요.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMTUg/MDAxNTEyNjYxMjMwMjUw.rMFhG2fHlDvdSsrjhPbp2IzaahMorHkGYD2MP2BTQ8sg.BosUSVfdHSbOueo8U9MnRsiE8HqNMzkzFgHK2viaHHUg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_11.27.19.png)
개발자 도구가 열여서 아래 press me 버튼을 클릭할 때마다 에러가 늘어나는 것을 확인할 수 있었습니다.
아까 만든 this.setState 부분에서 this 가 어떤 부분인지 알 수 없어서 발생하는 에러입니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMiAg/MDAxNTEyNjYxNDg3MDA4.APo93-bqMKCJ0bFN1yxSvwRUX8Ut_qyXGqas7atWzTUg.pus4bcU43MVGTmIG8rvznGjJH67Q3UtCdIC_NgUWwdMg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_11.27.53.png)
아래 빨간 네모 화면을 추가해 주고 버튼을 다시 클릭해보면
아래 화면과 같이 숫자가 올라가는 것을 확인할 수 있습니다.
드디어 간단하지만 Counter 기능이 구현되는 웹을 만드는데 성공하였습니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMTc2/MDAxNTEyNjYxNjgzMzMz.kq72RWB9hGpvMSLOYkjf4qkHx4kRaV4WC1oMPtSwWvwg.122OqGE6airwq5MwxxQxyk6Zi8DtT19iBDsaCoKjOFgg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_11.30.52.png)
![](http://cafefiles.naver.net/MjAxNzEyMDhfMjc0/MDAxNTEyNjYxNjgzNDMz.fn5EM6sQrHIt-T1c6n0MX65ONEJ66vQqwQKFwnP4F7Eg.62iZxq9kIDWdc3mdbkMejaHgKXSBu9PUcdUYDhdnHTQg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_11.31.34.png)
아까 확인했던 개발자 도구를 열어서 추가로 에러가 발생하는지 확인해보도록 하겠습니다.
그 전에 발생한 에러만 출력되고 버튼을 계속 눌러도 에러가 발생하지 않는 것을 확인하였습니다.
![](http://cafefiles.naver.net/MjAxNzEyMDhfMTc5/MDAxNTEyNjYxOTg3OTQ2.8rehoBUKTaJ9c9vXYcUrOJ5p65d82xYY1sBBeNjKweMg.i-Oe3J-t_if3LulUNGn73d1T18H77ODmWMH3G5k_pIkg.PNG.lifeleader/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7_2017-12-07_%EC%98%A4%ED%9B%84_11.54.14.png)
약간은 지루했던 문법까지 배우면서 4번째 시간만에 첫번째 웹을 만들어 봤습니다.
간단하지만 에러 없이 구현해봤다는 것에 의미를 부여하고,
앞으로는 조금 더 그럴듯한 웹을 만들기 위해서 더 공부해도록 하겠습니다.
고맙습니다.
'React > 왕초보 도전' 카테고리의 다른 글
6. 간단한 영화 웹 서비스 만들기 1 (0) | 2017.12.19 |
---|---|
5. component mapping , 간단한 주소록 구현 (0) | 2017.12.19 |
3. props 소개 (0) | 2017.12.19 |
2. ES6 클래스, JSX 소개 (0) | 2017.12.19 |
1. React 소개 (0) | 2017.12.19 |