<๊ฐ์>
ํ์๊ฐ์ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ค ๊ฐ์ ๋ก์ง์ ๊ฐ๋ค. ๋ชจ๋ ๊ฐ์ ๋ฐ์์ ๋ฐฑ์๋๋ก ๋ณด๋ด์ค๋ค. ๋ง์ฝ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฅ ์ ํ์ ๊ฒฝ์ฐ์๋ ์ค๋ฅ ๋ฉ์ธ์ง ๋์ด๋ค. ์ด๊ธฐํ ๋ฒํผ์ด ์๋ค.
๋ง์ฝ ์ด ๊ฐ์ ๋ก์ง์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑํ๋ค๋ฉด, ์ค๋ณต์ฝ๋๋ ๋ง๊ณ , ์ฝ๋๋์ด ๊ธธ์ด์ ธ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ง๊ธฐ ์ํด ํต์ผ๋ ํ๋์ ๋ก์ง์ ๋ง๋ค๊ณ , ํด๋น ๋ก์ง์ ํธ์ถํ ๋, ์ฐ๋ ์ธ์ ๊ฐ์ ๋ฌ๋ฆฌํจ์ผ๋ก์จ, ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
๋ํ Custom Hook์ด๋ผ๋ ์ปค์คํฐ๋ง์ด์งํ ํ ์ ๋ง๋ค์ด, ๊ฐ์ ๋ก์ง์ useState๋ฅผ ํ๋๋ก ํต์ผํ๊ณ , ์ฌ๊ธฐ ๋ฃ๋ ์ธ์๋ค์ ๋ฌ๋ฆฌ ํจ์ผ๋ก์จ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
1. ์ฝ๋ ๋ฆฌ๋ทฐ
import React, { useState } from 'react';
import {Button, TextInput, View} from 'react-native';
// ์ค๋ณต๋๋ ๋ก์ง ํ๋์ ์ปดํฌ๋ํธ๋ก ํต์ผ, ๊ฐ์ฒด๋ง๋ค ๋ค๋ฅธ ๊ฐ๋ค์ props๋ฅผ ํตํด ๋ค ์์ดํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ
const InputBox = (props) => {
return(
<View style={{flexDirection: "row"}}>
<TextInput value={props.value}
onChangeText={props.onChangeText}
style={{borderBottomWidth:1, width: 200}}
placeholder={props.placeholder}
/>
<Button title='์ด๊ธฐํ' onPress={props.onReset}/>
</View>
)
}
//useState ํ๋๋ก ํต์ผ, ํ๋์ ์ปดํฌ๋ํธ ์์ ์ง์ด๋ฃ์.
const useInput = (initialValue) => {
const [value, setValue] = useState(initialValue);
const resetValue = () => {setValue(initialValue)};
return{
value,
setValue,
resetValue,
}
}
//
const CustomHook = () => {
const {
value: name,
setValue: setName,
resetValue: resetName
} = useInput("");
const {
value: age,
setValue: setAge,
resetValue: resetAge
} = useInput("");
const {
value: city,
setValue: setCity,
resetValue: resetCity
} = useInput("");
return (
<View>
<InputBox
value ={name}
onChangeText = {setName}
placeholder = "์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์."
onReset = {resetName}
/>
<InputBox
value ={age}
onChangeText = {setAge}
placeholder = "๋์ด๋ฅผ ์
๋ ฅํด์ฃผ์ธ์."
onReset = {() => setAge("")}
/>
<InputBox
value ={city}
onChangeText = {setCity}
placeholder = "์ฌ๋ ๊ณณ์ ์
๋ ฅํด์ฃผ์ธ์."
onReset = {() => setCity("")}
/>
</View>
)
}
export default CustomHook;
2. ๊ตฌ์กฐ ๋ถํด ํ ๋น๊ณผ ์ฌ์ ์ธ
return{
value,
setValue,
resetValue,
}
customHook์ ๋ฆฌํด๊ฐ์ด 3๊ฐ์ด๋ค. ์ด๋ ๋ฆฌํด์ด ๋ฐฐ์ด์ ์ ์ ์๋ค. ์ด๋ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ผ๋ก ํ๋์ ๋ณ์์ ๋ฆฌํด ๊ฐ ํ ๊ฐ์ฉ ๋ฐ์ ์ ์๋ค.
const {
value
setValue
resetValue
} = useInput("");
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด, ํ์ ์ปดํฌ๋ํธ ๋ณ๋ก ์ฐ๊ธฐ๊ฐ ์ด๋ ต๋ค. ํ์ ์ปดํฌ๋ํธ์ ๋ค์ด๊ฐ๋ ๊ฐ๊ณผ ํจ์์ ์ด๋ฆ์ด ๋ค ๊ฐ์ผ๋ ํท๊ฐ๋ฆฌ๊ธฐ ์ญ์์ด๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ์ฌ ํ์ ์ปดํฌ๋ํธ ๋ณ๋ก ๋ถ๊ฐ์ด ๊ฐ๊ฒ ๋ณ์์ ํจ์๋ค์ ์ฌ์ ์ธ ํด์ค๋ค.
const {
value: name,
setValue: setName,
resetValue: resetName
} = useInput("");
3. ์ค์ค๋ก ํด๋ณด๊ธฐ
1. ํ์๊ฐ์ ๊ณผ ์ด๊ธฐํ ๋ฒํผ ๋ง๋ค๊ธฐ
2. ํ์๊ฐ์ ํญ๋ชฉ์ ์ด๋ฆ, ๋์ด, ์ฌ๋ ๊ณณ์ด๊ณ , ๋ค๋ค ๋ก์ง์ด ๊ฐ์ผ๋ฏ๋ก ํ๋์ ์ปดํฌ๋ํธ์ ๋ฌถ์ด ํํํ๊ธฐ.
3. ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ฅธ ๊ฐ ๋ณํ ๋ก์ง์ ๋ด๋นํ๋ useState๋ ๋ก์ง์ด ๊ฐ์ผ๋ ํ๋์ ์ปดํฌ๋ํธ์ ์ ์ธํ๊ณ ๊ทธ๊ฒ์ ์ฌ ์ฌ์ฉํ๊ธฐ.
import React, { useState } from 'react';
import {Button, TextInput, View} from 'react-native';
function InputBox(props) {
return(
<View style={{flexDirection: "row"}}>
<TextInput
style={{ borderBottomWidth: 3
,borderStyle: "dashed"
,color:"grey"
,width: 150}}
value={props.value}
OnChangeText = {props.OnChangeText}
placeholder = {props.placeholder}
/>
<Button title='์ด๊ธฐํ' onPress={props.OnReSet}
/>
</View>
)
}
const useInput = (InitialValue) => {
const [value, setValue] = useState(InitialValue)
const resetValue = () => {setValue(InitialValue)};
return (
value,
setValue,
resetValue
)
}
const CustomHook = () => {
const {value: name,
setValue: setName,
resetValue: resetName} = useInput("");
const {value: age,
setValue: setAge,
resetValue: resetAge} = useInput("");
const {value: city,
setValue: setCity,
resetValue: resetCity} = useInput("");
return (
<View>
<InputBox
value = {name}
OnChangeText = {setName}
OnReSet = {resetName}
placeholder = "์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์."
/>
<InputBox
value = {age}
OnChangeText = {setAge}
OnReSet = {resetAge}
placeholder = "๋์ด๋ฅผ ์
๋ ฅํด์ฃผ์ธ์."
/>
<InputBox
value = {city}
OnChangeText = {setCity}
OnReSet = {resetCity}
placeholder = "์ฌ๋ ๊ณณ์ ์
๋ ฅํด์ฃผ์ธ์."
/>
</View>
)
}
export default CustomHook;
์๊ฒ ๋ ๊ฒ
ํจ์ ๋ฆฌํด์ ๋ฐ์ ๋๋ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ Object ๊ฐ์ฒด ๋ฐฉ์์ผ๋ก ๋ฐ์์ผ ํ๋ค.
ํจ์๋ ์ผ๋ฐ ๊ฐ์ฒด ์ทจ๊ธ์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
JS ์์๊ฐ์ฒด๋ ๊ฐ๋ค์ Key = Value ํ์์ผ๋ก ์ ์ฅํ๋ค.
์ฌ๊ธฐ์ฌ์ value๊ฐ ๋ฐ์ธ๋ฉ ๋๋ ๋ ์์ด๊ณ , ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ฐ๋ ๋ ์์ด๋ค.
{๋ณ์} ์ผ๋ก ๋ฌถ์ผ๋ฉด ์ด๊ฑด ๋ณ์ ์์ ๊ฐ์ ์ฐ๊ฒ ๋ค๋ ๋ป.
{๋ช
๋ น์ด(๋งํฌ)} ๋ช
๋ น์ด๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ฐ๊ฒ ๋ค๋ ๋ป.
๋ด๊ป ์ด๊ธฐํ๊ฐ ์๋จ ใ ใ
// ๋ค์ ๋ ์ด๊ธฐํ ํ์์.
๋ด๊บผ์์ ํ๋ฆฐ ๋ถ๋ถ์ TextInput์ onChange ์์ฑ์ Onchange๋ผ๊ณ ๋๋ฌธ์๋ก ์ ์ ๊ฒ.
๊ทธ๋ฆฌ๊ณ customHook์ return์ ()๋ก ๋ฌถ์ ๊ฒ์ด๋ค.
return () ์ ํ๋์ ๊ฐ๋ง ๋ฐํ์ด ๊ฐ๋ฅํ๋ค. ์ง๊ธ๊น์ง ()๋ฅผ ์ผ๋ ์ด์ ๋ return์ view ํ๋๋ง ํ๊ธฐ ๋๋ฌธ์ด์๋ค.
์ฌ๋ฌ๊ฐ ํ ๋ ค๋ฉด return {A, B, C} ํ์์ผ๋ก ๋ฌถ์ด์ผ ํ๋ค.