티스토리 뷰
배운 것들을 활용하면 그럴싸한 예제를 만들어 볼 수 있습니다.
앞에 것들을 활용한 예제입니다.
컴포넌트는 게슈탈트를 이용했습니다. 수락 버튼을 누르면 "님과 친구가 되었습니다"라는 멘트로 바뀌고 맨 위에 사람 옆의 숫자가 올라갑니다. 취소를 누르면 숫자가 다시 줄어들고 "님이 친구요청을 했습니다"라고 바뀌게됩니다. 제 코드도 공유해드릴테니 비슷하게 만들어보셔도 되고, 참고해서 따로 다른 형태라도 만들어보세요~
예제 만들기
우선은 콘텍스트를 만들어야 합니다.
import React from 'react'; | |
const Store = React.createContext(null); | |
export default Store; |
저는 리덕스와 최대한 비슷한 형태로 만들기 위해 src 디렉토리 안에 store라는 파일을 만들고 코드를 작성했습니다. 콘텍스트도 Store라는 변수 안에 담았습니다.
//최상위 디렉토리에 .env 파일을 만들고 NODE_PATH=src 를 입력하시면 src을 기준으로 파일을 찾아갑니다. | |
//그래서 store 앞에 아무것도 붙이지 않았습니다. | |
import React, { Component } from 'react'; | |
import Presenter from './Presenter'; | |
import Store from 'store'; | |
class Container extends Component { | |
constructor(props){ | |
super(props); | |
this.state= { | |
togglePermit: this._togglePermit, | |
profile: { | |
madeleine: { | |
name:"madeleine", | |
img:"https://randomuser.me/api/portraits/med/women/94.jpg", | |
isPermit: false, | |
}, | |
cindy: { | |
name:"cindy", | |
img:"https://randomuser.me/api/portraits/med/women/22.jpg", | |
isPermit: false, | |
}, | |
florence: { | |
name:"florence", | |
img: "https://randomuser.me/api/portraits/med/women/92.jpg", | |
isPermit: false, | |
}, | |
louis:{ | |
name:"louis", | |
img: "https://randomuser.me/api/portraits/med/men/5.jpg", | |
isPermit: false | |
}, | |
dennis: { | |
name: "dennis", | |
img:"https://randomuser.me/api/portraits/med/men/19.jpg", | |
isPermit: false | |
} | |
} | |
} | |
} | |
render() { | |
return ( | |
<Store.Provider value={this.state}> | |
<Presenter /> | |
</Store.Provider> | |
); | |
} | |
_togglePermit = (name) => { | |
this.setState(prevState => { | |
return { | |
...prevState, | |
profile: { | |
...prevState.profile, | |
[name]: { | |
...prevState.profile[name], | |
isPermit: !prevState.profile[name].isPermit | |
} | |
} | |
} | |
}) | |
} | |
} | |
export default Container; |
생성자를 선언하고 그 안에 state를 정의했습니다. 또한 state를 Provider의 값으로 전달하기 때문에 필요한 함수도 state 안에 선언되어 있습니다. 여기서 주의할 점은 각 프로필에 isPermit이 정의되어 있다는 점과 생성자 안에 함수를 넣어도 bind(this)를 하지 않아도 되는 점입니다. 일단 각각의 프로필 안에 isPermit이라는 값이 있어야 저처럼 프로필 마다의 수락과 취소를 할 수 있습니다. 또 화살표 함수로 _togglePermit이라는 함수를 정의했기 때문에 bind(this)를 써서 따로 묶어줄 필요가 없습니다.
네비게이션에서는 friendNum이라는 함수를 정의했습니다. 프로필에서 Permit이 true인 친구목록을 만들어서 숫자를 리턴하는 함수입니다. 이 함수를 정의하고 나서 컴포넌트 안에서는 컨슈머를 통해 프로필을 가져와서 friendNum이라는 함수 안에 넣었습니다.
이처럼 게슈탈트와 같은 프레임워크를 이용하면 깔끔하게 사용할 수 있는 컴포넌트를 빠르게 얻을 수 있고, 그럴싸한 예제를 만들 수 있습니다. 한번 만들어보세요. 프로그래밍의 재미를 느껴보세요!
다음 포스팅은 styled components를 다뤄보도록 하겠습니다.
공감은 제작자에게 큰 힘이 됩니다.
'Frontend-dev > react' 카테고리의 다른 글
스타일드 컴포넌트 더 알아보기 (0) | 2018.10.01 |
---|---|
스타일 컴포넌트 흝어보기 (0) | 2018.09.29 |
react의 context 알아보기 (0) | 2018.09.27 |
리액트 Fragment (0) | 2018.09.20 |
게슈탈트로 이미지 컴포넌트 만들기 (0) | 2018.09.18 |