React, useReduce, 커스텀 Hook (useInputs)
2024. 12. 16. 14:25ㆍ카테고리 없음
useInput.jsx
import { useReducer } from 'react'; // 다양한 컴포넌트 상황에 따라 상태를 다른 값으로 업데이트
function reducer(state, action) {
// 불변셩을 지키면서 업데이트한 새로운 상태를 반환
return {
...state,
[action.name]: action.value,
};
}
// 컴포넌트 사황에 따라 다양하게 적용되는 useReducer hook
// useReducer 첫번째 파리미터는 리듀서 함수, 두번째 파라미터에는 기본값
export default function useInputs(initialForm) {
const [state, dispatch] = useReducer(reducer, initialForm);
const onChange = (e) => {
dispatch(e.target);
};
return [state, onChange];
}
Info.jsx
import React from 'react';
import useInputs from './useInputs';
const Info = () => {
const [reduceState, onChange] = useInputs({
name: '',
nickname: '',
});
const { name, nickname } = reduceState;
return (
<div>
<div>
<input name="name" value={name} onChange={onChange} />
<input name="nickname" value={nickname} onChange={onChange} />
</div>
<div>
<div>
<strong>이름:</strong> {name}
</div>
<div>
<strong>닉네임: </strong> {nickname}
</div>
</div>
</div>
);
};
export default Info;
https://stackblitz.com/edit/react-basecamp-emcnkpqn?embed=1&file=src%2FInfo.jsx