resolve: {
extensions: [ '.js', '.vue', '.json' ],
alias: {
'@': path.resolve( __dirname, '..' )
}
}
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด @๋ฅผ ํตํด ์ฝ๊ฒ import ํ ์ ์๋ค.
<div id="app">test-component</div> | |
<script> | |
(function() { | |
// vue init | |
landing.createApp('#app', { | |
test: 'test' | |
}); | |
}()); | |
</script> |
<template> | |
<div> | |
Hello World!!! | |
</div> | |
</template> |
{ | |
"name": "vue-in-the-php", | |
"version": "1.0.0", | |
"description": "pack of code for Medium story example code", | |
"main": "index.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1", | |
"vue": "cross-env NODE_ENV=development webpack --config webpack.config.landing --watch", | |
"vue:build": "cross-env NODE_ENV=production webpack --config webpack.config.landing" | |
}, |
const VueLoaderPlugin = require('vue-loader/lib/plugin'); | |
const path = require('path'); | |
// ๊ฐ๋ฐํ๊ฒฝ์ธ์ง ์๋์ง ํ๋จํ์ฌ ๋ง์ผ๋ฉด true๋ฅผ, ์๋๋ฉด false๋ฅผ ์ ์ฅํ๋ค | |
const isDevelopment = process.env.NODE_ENV !== 'production'; | |
module.exports = { | |
// ๊ฐ๋ฐ๋ชจ๋๋ฅผ ์ค์ | |
mode: process.env.NODE_ENV, | |
// ๋น๋์ ์ค์ฌ์ด ๋ ํ์ผ์ ์ค์ ํ๋ค. ์ฌ๊ธฐ์๋ Vueํ๋ก์ ํธ์ rootํ์ผ์ธ index.jsํ์ผ์ ์ค์ ํ๋ค. |
์ด ๊ธ์ ์ฝ๋๋ ์ ์์ Github์์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ๊ธ์ Redux๋ฅผ ์ง์ ์ฌ์ฉํด ๋ณด์๊ฑฐ๋ ์ต์ํ ๊ด๋ จ ์ง์์ด ์๋ค๋ ์ ์ ํ์ ์ค๋ช ํฉ๋๋ค. ๋ง์ฝ ๋ชจ๋ฅธ๋ค๋ฉด ๊ด๋ จ ๊ณต๋ถ๋ฅผ ๋จผ์ ํด์ฃผ์ธ์.
์ ๋ฒ๊ธ์์ React Hooks๋ฅผ ์ด์ฉํ router๋ฅผ ์ค๋ช
ํด ๋ณด๊ฒ ๋ค๊ณ ํ์ผ๋ ๊ณํ์ ์กฐ๊ธ ๋ณ๊ฒฝํ์ต๋๋ค. ์๋ฌด๋๋ ์ด ๋ถ๋ถ์ ์ค๋ช
ํ๊ณ ๋์ด๊ฐ์ผ ์ด๋ป๊ฒ ๋ค๋ฅธ Hooks๋ค์ด ๋์ํ๋์ง๋ฅผ ์ค๋ช
ํ ์ ์์ ๊ฒ ๊ฐ์์ต๋๋ค. ์ฐ์ ์ ๋ฏธ๋ค๋๋ useReducer
๋ฅผ ์ค๋ช
ํด๋ณด์ฃ .
Redux, Reducer์ ๋ํ ๊ฐ๋
์ React์ ๋ค์ํ ์ปดํฌ๋ํธ๋ค์์ ํตํฉ์ ์ผ๋ก state๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ณ ์๋์์ต๋๋ค. ์ด ๋ง์ด ๋ฌด์์ด๋๋ฉด, ์ดํ๋ฆฌ์ผ์ด์
์ ์ฒด๋ฅผ ๊ดํตํ๋ ์ํ๊ด๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ง๋ค์ด ์ก๋ค๋ ๋ง์
๋๋ค. ์ปดํฌ๋ํธ๋ค์ ์ํ์ ๋ฐ๋ผ ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ํ๊ณ๊ฐ ์๊ณ , ์ด๋ป๊ฒ ๊ตฌํ์ ํ๋ค๊ณ ํด๋ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ ๋ฌธ์ ๊ฐ ์์๊ธฐ ๋๋ฌธ์
๋๋ค. useReducer
๋ ํจ์ํ ์ปดํฌ๋ํธ์์์ Redux๋ฅผ ์ด๋์ ๋ ๋์ ํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด์ฐจํผ ์ค๋ช
์ ์ค์ค์ด ํ๋ ๊ฒ ๋ณด๋ค๋ ์ง์ ๋ณด๋๊ฒ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ฐ์ ๋ณด๋๋ก ํ์ฃ .
์ด ๊ธ์ ์ฝ๋๋ ์ ์์ Github์์ ํ์ธํ ์ ์์ต๋๋ค.
React์์ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋ ๋์๋ ์ปดํฌ๋ํธ ์์ ์ ์ธ๋ ํจ์๋ค์ ์๋ก ์์ฑํฉ๋๋ค. ๊ฒฐ๊ตญ ๊ณ์ํด์ ๋ ๋๋ง ๋๋ฉด ํจ์๋ ๊ณ์ํด์ ์๋ก ์์ฑ๋๋ค๋ ์๊ธฐ์
๋๋ค. ๋ฑ ๋ค์ด๋ด๋ ๋นํจ์จ์ ๋์๊ฐ ๋์ง ์์ต๋๊น? ์ด๋ฐ ๋นํจ์จ์ ์ธ ์ํ๋ฅผ Reactํ์ด ๊ทธ๋ฅ ๋ณด๊ณ ๋์ด๊ฐ์ ๋ฆฌ ์๊ฒ ์ฃ . ๊ทธ๋์ ๋์จ๊ฒ์ด useCallback
์
๋๋ค. ์ ๋ฒ ๊ธ์ useMemo
์ ๋น์ทํ๊ฒ ํผํฌ๋จผ์ค์ ํจ์จ์ฑ์ ์ํ ๊ฐ๋
์ผ๋ก ๋ง๋ค์ด ์ก์ต๋๋ค. ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ฝ๋๋ฅผ ๋จผ์ ๋ณด๊ฒ ์ต๋๋ค.
const UseCallbackExample = () => {
const [string, setString] = useState('');
์ด ๊ธ์ ์ฝ๋๋ ์ ์์ Github์์ ํ์ธํ ์ ์์ต๋๋ค.
useContext
๋ฅผ ์๊ธฐ ์ํด์๋ ๋จผ์ React์ Context๊ธฐ๋ฅ์ ๋ํด์ ์์์ผ ํฉ๋๋ค. ํด๋น ๊ธฐ๋ฅ์ ๋ํ ์ค๋ช
์ ๊ณต์ ํ์ด์ง์ ์์ธํ๊ฒ, ์ฌ์ง์ด ํ๊ธ๋ก ์ ํ์์ผ๋ ๋ชจ๋ฅด๊ฒ ๋ค ํ์๋ ๋ถ๋ค์ ๋จผ์ ๋ณด์๋๊ฑธ ์ถ์ฒํฉ๋๋ค. Context, ๊ทธ๊ฒ์ React์์ props๋ฅผ ๋๊ธฐ๋ ๊ณผ์ ์ ๋๊ธฐ์ํด ๋ง๋ค์ด ์ก์ต๋๋ค. ์ -๊ธฐ ๋ฐ์์๋ ์ปดํฌ๋ํธ๋ฅผ ์ํด ์์ ์ปดํฌ๋ํธ๋ง๋ค props๋ฅผ ๋๊ธฐ๋ ๊ฑด ๋นํจ์จ์ ์ด๋๊น์. ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋ง๋ค์ด์ง Context์กฐ์ฐจ๋ ์๋ฒฝํ์ง๋ ์์์ต๋๋ค. ํจ์ํ ์ปดํฌ๋ํธ์์ ํ๋์ Context๋ฅผ ์ํด์๋ ํ๋์ Wrapper๊ฐ ํ์ํ๋ฐ, ์ด ๋ง์ ๊ฒฐ๊ตญ ๋ง์ Context๋ฅผ ์ํด์๋ ๋ง์ Wrapper๊ฐ ํ์ํด์ง๋ค๋ ๋ง์
๋๋ค. ๊ฒฐ๊ตญ ๋ณต์กํ React ํ๋ก์ ํธ๋ฅผ Wrapper Hell๋ก ๋ง๋ค์ด ๋ฒ๋ฆฌ๊ธฐ ์ถฉ๋ถํ ์์ค์
๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ useContext
๊ฐ ํ์ํ์ต๋๋ค.
useContext
๋ ๋์ด์ ํจ์ํ ์ปดํฌ๋ํธ์์ Context๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด
์ด ๊ธ์ ์ฝ๋๋ ์ ์์ Github์์ ํ์ธํ ์ ์์ต๋๋ค.
์ง๋๊ธ์์ useState
๋ฅผ ์ด๋ฏธ ์ดํด ๋ณด์์ต๋๋ค. ๊ฐ๋จํ ์ ๋ฆฌํ์๋ฉด "ํจ์ํ ์ปดํฌ๋ํธ์์๋ state๋ฅผ ์ฌ์ฉํ ์ ์๋ค! ๊ฐ๊ฟ!" ์ด์์ฃ ? ํ์ง๋ง ์ฌ์ฉ๋ง ํ๋ค๊ณ ๋ค๊ฐ ์๋๊ฒ์ด ์ฐ๋ฆฌ๋ด ์ฝ๋ฉ ์ธ์์ด๊ณ , ๋ณต์กํ ๋ก์ง์ ์ํ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณผ ํ์๊ฐ ๋น์ฐํ ์์ต๋๋ค. useEffect
๋ ๊ทธ๋ฌํ ๊ธฐ๋ฅ๋ค ์ค ํ๋๋ก useState
๊ฐ ๊ธฐ์กด์ ๋ฐฉ์์ ๋์ฒดํ๋ ๊ฒ ์ฒ๋ผ ํด๋น ๊ธฐ๋ฅ ์ญ์ componentDidUpdate
์ componentDidMount
๋ฅผ ๋์ ํ๋ค๊ณ ๋ด๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ ํํ ๊ธฐ๋ฅ์ ๋จผ์ ๋งํด๋ณด์๋ฉด, ๋ฆฌ์ํธ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋ ์๋์ผ๋ก ํด๋น ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋๋ฐ, ์ง๋๊ธ์์ ์ค๋ช
ํ Hook์ ์ด๋ฅผ ํตํด ์ดํดํ ์ ์์ ๊ฒ ๊ฐ๋ค์. ํน์ ๋์์ด ๋ฐ์ํ๋ฉด ํน์ ํ๋์ ์๋์ผ๋ก ์คํํ๋ค. ๋ค, Hook์
๋๋ค.
const UseEffectExample = () => {
const [test, setTest] = useState('initial value');
์ด ๊ธ์ ์ฝ๋๋ ์ ์์ Github์์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๊ฑด ์ ๊ฐ ์ด์ ์์ผ ์ด๊ฑธ ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฆ๊ฒ๋ผ๋ ์์์ผ๋ ์์ํด์ผ์ฃ ๋ณ์ ์๋์.