제라스가 React를 다루는 방법
useReducer를 사용해보자!
Xerath(제라스)
2023. 1. 8. 00:46
728x90
반응형
React Hook에서 useReducer를 사용하면 여러개의 input이 존재하더라도 간편하게 관리할 수가 있다!!
1) 커스텀 Hook을 사용하지 않은 Ver.
//Info.js - NonCustomed Ver.
import React, { useReducer } from "react";
function reducer(state, action) {
return {
...state,
[action.name]: action.value,
};
}
const Info = () => {
// const [name, setName] = useState("");
// const [nickname, setNickname] = useState("");
const [state, dispatch] = useReducer(reducer, { name: "", nickname: "" });
const { name, nickname } = state;
const onChange = (e) => {
dispatch(e.target);
};
return (
<div>
<div>
<input name="name" value={name} onChange={onChange} />
<input name="nickname" value={nickname} onChange={onChange} />
</div>
<div>
<div>
<b>이름: {name}</b>
</div>
<div>
<b>닉네임: {nickname}</b>
</div>
</div>
</div>
);
};
export default Info;
2) 커스텀 Hook을 사용한 Ver.
//useInputs.js
import { useReducer } from "react";
function reducer(state, action) {
return {
...state,
[action.name]: action.value,
};
}
export default function useInputs(initialForm) {
const [state, dispatch] = useReducer(reducer, initialForm);
const onChange = (e) => {
dispatch(e.target);
};
return [state, onChange];
}
//Info.js - Customed Ver.
import useInputs from "./useInputs";
const Info = () => {
// const [name, setName] = useState("");
// const [nickname, setNickname] = useState("");
const [state, onChange] = useInputs({ name: "", nickname: "" });
const { name, nickname } = state;
return (
<div>
<div>
<input name="name" value={name} onChange={onChange} />
<input name="nickname" value={nickname} onChange={onChange} />
</div>
<div>
<div>
<b>이름: {name}</b>
</div>
<div>
<b>닉네임: {nickname}</b>
</div>
</div>
</div>
);
};
export default Info;
[출처] 리액트를 다루는 기술
728x90
반응형