Custom hook?
useState, useEffect๋ฑ Hook์ ์ฌ์ฉํ์ฌ ์ํ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ์ ์ฝ๋์๋ ๋ฐ๋ณต๋๋ ๋ก์ง๋ค์ ๋ง์ด ๋ฐ๊ฒฌํ ์ ์์ฃ . JS์์๋ ์ค๋ณต๋ ๋ก์ง์ ํจ์๋ผ๋ ๊ฐ๋
์ผ๋ก ๋ฝ์๋๋๋ฐ์.
๋ฆฌ์กํธ์์๋ ๊ทธ๋ ๊ฒ ํ๊ณ ์ถ์๊ฒ ๋น์ฐํฉ๋๋ค.
์ด์ ๊ฐ์ด ์ค๋ณต๋๋ Hook์ ์ฐ๋ฆฌ ๋ง์๋๋ก ๋ง๋ค์ด ๋ถ๋ฆฌํ๊ณ ์ฌ์ฌ์ฉํ๋ ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
Custom Hook ์ฌ์ฉํ๊ธฐ
์๋์๊ฐ์ ์ปดํฌ๋ํธ 2๊ฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
import React, { useState } from 'react'; function InputComponent() { const [value, setValue] = useState('') function onChange(e) { setValue(e.target.value) } return ( <> <input type="text" onChange={onChange}/> <div> {value} </div> </> ) } export default InputComponent
import React, { useState } from 'react'; function SomethingComponent() { const [value, setValue] = useState('') function onChange(e) { setValue(e.target.value) } return ( <> <input type="text" onChange={onChange}/> <div> {value}๊ฐ ๊ฐํด์ก๋ค ๋๊ฒฉํด! </div> </> ) } export default SomethingComponent
์
๋ ฅ์ฐฝ์์ ์
๋ ฅํ๊ฐ์ ํตํด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋๋ก ๋์์ฃผ๋ onChange๋ถ๋ถ์ ๋ณด๊ฒ ์ต๋๋ค.
SomethingComponent์ InputComponent์์ ๋๊ฐ์ ๋ก์ง์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํ์ง๋ง ๊ฐ ์ํ๋ ์ปดํฌ๋ํธ๋ณ๋ก ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณต์ ํ๋ฉด ์๋์ฃ .
์ด๋ฐ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Hookํด๋๋ฅผ ๋ง๋ ํ useInput.jsํ์ผ์ ๋ง๋ค์ด์ฃผ์ธ์
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์์ฑํด์ค๋๋ค.
ํ
์ ์ด๋ฆ์ ํญ์ โuseNameโํ์์ผ๋ก ์์ฑํฉ๋๋ค.
์๋ ๋ด์ฉ์ ๋ณด์๋ฉด ์ด์ ์ ๊ฐ ์ปดํฌ๋ํธ์์ ์ค๋ณต ๋์ด์๋ ๋ก์ง๊ณผ ๋์ผํ ๋ถ๋ถ์ด ๊ทธ๋๋ก ์์ฑ๋์ด์๋๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฆฌํด์ผ๋ก value๊ฐ๊ณผ ์ํ๋ฅผ ์กฐ์ํด์ฃผ๋ onChangeํจ์๋ฅผ ๋๊ฒจ์ค๊ฑฐ์์.
import { useState } from 'react'; function useInput(initState) { const [value, setValue] = useState(initState) function onChange(e) { setValue(e.target.value) } return [value, onChange] } export default useInput
์์ฑํ์
จ๋ค๋ฉด ์ปดํฌ๋ํธ๋ก ๋์์์ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ฃผ๊ฒ ์ต๋๋ค.
ํจ์ฌ ๊น๋ํด์ง ๋ชจ์ต์ ๋ณด์ค ์ ์์ต๋๋ค.
import React from 'react'; import useInput from '../Hook/useInput' function InputComponent() { const [value, onChange] = useInput("") return ( <> <input type="text" onChange={onChange}/> <div> {value} </div> </> ) } export default InputComponent
import React from 'react'; import useInput from '../Hook/useInput' function SomethingComponent() { const [value, onChange] = useInput("") return ( <> <input type="text" onChange={onChange}/> <div> {value}๊ฐ ๊ฐํด์ก๋ค ๋๊ฒฉํด! </div> </> ) } export default SomethingComponent
App.js์ ๋ชจ์์ ๋ณผ์์๋ ์์
import React, { useState } from 'react'; function useInput() { const [value, setValue] = useState('') function onChange(e) { setValue(e.target.value) } return [value, onChange] } function InputComponent() { const [value, onChange] = useInput('') return ( <> <input type="text" onChange={onChange}/> <div> {value} </div> </> ) } function SomethingComponent() { const [value, onChange] = useInput('') return ( <> <input type="text" onChange={onChange}/> <div> {value}๊ฐ ๊ฐํด์ก๋ค ๋๊ฒฉํด! </div> </> ) } function App(){ return( <> <InputComponent/> <SomethingComponent/> </> ) } export default App