container / presentational ํจํด: JS์ HTML(JSX) ๋ถ๋ถ์ ๋ฐ๋ก ๋๋. -> ์ ๋ช ํ ๊ณ ์ ๋ฐฉ์
hooks ํจํด: use๋ก ์์ํ๋ hooks ๊ธฐ๋ฐ์ผ๋ก ํด๋ ๋ง๋ค๊ธฐ -> ์ต์ ๋ฐฉ์
์ํ ๋ฏน(atomic) ํจํด: component๋ฅผ ์ข ๋ ์ฒด๊ณํ
hooks ํจํด์ด ์ต์ ์์ด๊ธฐ๋ ํ๋, ์์ง๊น์ง ๊ณ ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ธฐ์
๋ค๋ ๋ง๊ธฐ ๋๋ฌธ์ ๋ค ์์๋ ํ์๊ฐ ์๋ค. ๊ฒ์ํ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋๋ ๋์์๋ ๊ณ ์ ๋ฐฉ์์ธ container / presentational ํจํด
์ ์ฌ์ฉํ ์์ ์ด๋ค.
์์ค์ฝ๋๋ฅผ Container(JS)
/ Presenter(HTML: JSX)
๋ก ๋๋๋ ๋ฐฉ์์ด๋ค. BoardWrite๋ผ๋ ํ์ผ์ ๋ง๋ ๋ค๊ณ ํ ๋, ์๋์ ๊ฐ์ด ํ์ผ์ ๋๋๋ค.
BoardWrite.container.js
BoardWrite.presenter.js
import๋์ด ๋ถ๋ ค๊ฐ๋ ์ปดํฌ๋ํธ๋ฅผ ์์ ์ปดํฌ๋ํธ
, importํ์ฌ ๋ถ๋ฌ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ
๋ผ ํ๋ค.
์๋์ BoardWrite.container.js์ BoardWrite.presenter.js ํ์ผ์ ์์๋ก ์์๋ณด์.
//BoardWrite.container.js
import BoardWrite from "./BoardWrite.presenter"
//BoardWrite.presenter๋ฅผ ๋ถ๋ฌ์ด.
export default function BoardWrite() {
const [writer, setWriter] = useState()
const handleChanceWriter = (event) => {
const writer = event.target.value
setWriter(writer)
}
return(
<BoardWriteUI />
//BoardWrite.presenter.js์ BoardWriteUI ํจ์ ๋ถ๋ฌ์ด.
)
}
// BoardWrite.presenter.js
export default function BoardWriteUI() {
return(
<Wrapper>
<Title></Title>
<Writer type="text" placeholder="์ด๋ฆ" onChange={handleChangeWriter}/>
</Wrapper>
)
}
์์ ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก ๋ค์ด๊ฐ์ ์ฐ๋ฆฌ ๋์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ณด์ฌ์ง๊ฒ ๋๋ค. ๋ํ ํ์ผ์ 2๊ฐ๋ก ๋๋ ์ ธ ์์ง๋ง ์คํํ ๋์๋ pages
์์ ํ๋๋ก ํฉ์ณ์ ธ์ ์คํ๋๋ค๋ ๊ฒ์ ์์ง ๋ง์!
์ฐ๋ฆฌ๊ฐ ๋ธ๋ผ์ฐ์ ๋ก ๋ณผ ์ ์๋ component๋ pages
์ ์๋ index.js๋ฟ์ด๊ธฐ ๋๋ฌธ์ ํ๋๋ก ํฉ์ณ๋ container๋ฅผ pages์ ๊ฐ๊ณ ์์ import
ํด์ผ ํ๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ํ๋ ๋ฐ์ํ๋ค. ์ปดํฌ๋ํธ๋ฅผ 2๊ฐ๋ก ๋๋๋ฉด์ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ฒ ๋์๋ค. ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด props์ด๋ค.
props
๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ฆ, ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฌผ๋ ค์ฃผ๋ ๋ณ์ ํน์ ํจ์๋ผ๊ณ ํ ์ ์๋ค! props๋ ๊ฐ์ฒด
๋ก ๋ฌถ์ฌ์ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋์ด๊ฐ๋ค. ์์์ ๋ดค๋ BoardWrite ์์๋ฅผ ๋ค์ ๋ณด์.
//BoardWrite.container.js
export default function BoardWrite() {
const [writer, setWriter] = useState()
const handleChanceWriter = (event) => {
const writer = event.target.value
setWriter(writer)
}
return(
<BoardWriteUI handleChangeWriter={handleChangeWriter}/>
// props = { handleChangeWriter: handleChangeWriter }
)
}
props๋ ๊ฐ์ฒด์ ํํ๋ก key์ value๊ฐ์ ๋ด๊ณ ์๋ค.
// BoardWrite.presenter.js
export default function BoardWriteUI(props) {
// ์๊ดํธ ์์ props ๋ฃ์ด์ฃผ๊ธฐ
return(
<Wrapper>
<Title></Title>
<Writer type="text" placeholder="์ด๋ฆ" onChange={props.handleChangeWriter}/>
</Wrapper>
)
}
container.js ํ์ผ์์ props ๊ฐ์ฒด์ handleChangeWriter๋ผ๋ key์ ๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ค!
๊ทธ๋ ๋ค๋ฉด ์์์ด ๋ถ๋ชจํํ
๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ ค์ค ์ ์์๊น? ๋ฌผ๋ ค์ค ์ ์๋ค. React์์๋ ๋ถ๋ชจ ์์ํํ
์ค ์๋ง ์๋ค. ๋ฐ์ดํฐ์ ํ๋ฆ์ด ๋จ๋ฐฉํฅ ๊ตฌ์กฐ
์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ป๊ฒ ๋ณด๋ฉด ์ด๋ฌํ ์ ์ด ๋ถํธํด ๋ณด์ด์ง๋ง, ์๋ฌ๋ฅผ ์บ์นํ๊ธฐ ์ฝ๊ณ ๋ณด๊ธฐ์ ๋ ๊น๋ํ๋ค๋ ์ฅ์ ์ด ์๋ค.
์ฐ๋ฆฌ๊ฐ import๋ฅผ ํด์ฌ ๋ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ฆฌ๊ณ ์ค๋ ๊ฒ์ด ์๋๊ฐ ํ๋ฉด, ์ค๊ดํธ ์์ด ๋ฐ๋ฆฌ๊ณ ์ค๋ ๊ฒ์ด ์๋ค. ์ค๊ดํธ์ ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ผ export์ export-default๋ฅผ ๋๋ ์ ์๋ค.
import { useMutation, gql } from "@apollo/client";
//export
import BoardWriteUI from "./BoardWrite.presenter";
//export-default
export
๋ ํ ์ปดํฌ๋ํธ ์์์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ด๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ค๊ดํธ ์์์ ์ด๋ค ๊ฑธ ์ ํํด์ ์ฌ์ฉํ๊ณ ์ถ์์ง ์ ์ด์ importํ๊ฒ ๋๋ค. ๋ํ import๋ฅผ ํด์ฌ ๋ exportํ ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํด์ผ ํ๋ค. ๋ด ๋ง์๋๋ก import ๋ค์ ์ด๋ฆ์ ์ง์ ํ๊ธฐ ์ํด์๋ { ์๋ ์ด๋ฆ as ๋ฐ๊ฟ ์ด๋ฆ }
์ผ๋ก ์์ฑํด์ผ ํ๋ค. ๋ง์ฝ ํ๋ฒ์ ๋ฌถ์ด์ import ํ๊ณ ์ถ๋ค๋ฉด, import * as ์ด๋ฆ from '๊ฒฝ๋ก'
์ ํํ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ฐ๋ฉด export-default
๋ ํ ์ปดํฌ๋ํธ ์์์ ํ๋๋ง ๋ด๋ณด๋ด๊ธฐ ๋๋ฌธ์ import ํ ๋ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ๋ด ๋ง์๋๋ก import ๋ค ์ด๋ฆ์ ์ง์ ํ ์ ์๋ค.
๐ก ์ค๋์ ๋๋ ์ : ๊ทธ๋์ ๋ง๋๋ ํ์ด์ง์ ์ด๋ฆ๋ง ๊ตฌ๋ถํด์ ํด๋๋ฅผ ๋ง๋ค์์๋๋ฐ, ์ค๋ ํด๋ ๊ตฌ์กฐ ์ฒด๊ณํ๋ฅผ ๋ฐฐ์ฐ๋ฉด์ ์์ผ๋ก์ ํ๋ก์ ํธ์๋ ํด๋๋ฅผ ์ ๋๋์ด์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๊ฐ๋ ์ฑ์ด ๋์ ์์ค์ฝ๋๋ฅผ ๋ง๋ค๊ณ , ๋ฌธ์ ์ ์ ์ฐพ๊ณ ์์ ํ๋ ์๊ฐ์ ๋จ์ถํ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋ฉํ ๋๊ป์ ์์ผ๋ก ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๊ฐ์ ๋ง๋ค ๋ถ๋ถ์ ๋๋์ด ์ฝ๋๋ฅผ ์งค ๊ฑฐ๋ผ๊ณ ๋ง์ํ์ จ๋ค. ์๊ฐํด๋ณด๋ ๋ด๊ฐ ์ง ์ฝ๋๋ฅผ ๋๋ ์ ์์ง๋ง, ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฝ์์ ๋์๋ ๋๋งํผ ๊ตฌ์กฐ๋ฅผ ์ ๋ชจ๋ฅผ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฐฉ๋ํ ์์ค์ฝ๋๋ฅผ ๊ตฌ์กฐ๋ณ๋ก ์ ๋๋ ์ ์ ์ฅํ๋ฉด ํ์ ์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.
๋ํ ์ฝ๋๋ฅผ ์์ ํ ๋์๋ ๋ช ๋ฐฑ์ค์ง๋ฆฌ ๊ธด ์ฝ๋๋ฅผ ๋ค์ ธ๊ฐ๋ฉฐ ์ฐพ๋๋ฐ ์ ๋ฅผ ๋จน๋ ์ผ์ด ๋ํ ๊ฒ ๊ฐ์์ ์ข์ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก๋ ์ด๋ ๊ฒ ํด๋๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋๋์ด์ ๊ด๋ฆฌํด์ผ๊ฒ ๋ค!