useEffect(() => {
console.log('check values :: ', values);
}, [values]);
import { useDispatch } from 'react-redux';
import { setUser } from 'store/userSlice';
...
const Login = () => {
const handleSubmit = async (e) => {
...
try {
const res = await axios.post('/api/member/login', values);
const token = res.headers['authorization'];
if (token) {
// 값 세팅
dispatch(setUser({
token: token.split(' ')[1]
}));
alert('로그인되었습니다.');
resetForm();
navigate('/');
} else {
alert('로그인 중 오류가 발생했습니다. 다시 시도 해 주세요.');
}
} catch (error) {
console.error('로그인 실패:', error);
const errorMessage = error.response?.data?.message || '로그인 중 오류가 발생했습니다.';
alert(errorMessage);
}
};
}
import { useSelector } from 'react-redux';
import { selectToken } from 'store/memberSlice';
...
const Home = () => {
// memberSlice 에 select 로 함수를 export 경우
const token = useSelector(selectToken);
// 선언하지 않은 경우
const token = useSelector(state => state.member?.token);
}
const handleSubmit = async (e) => {
// 이벤트 중복실행 방지
e.preventDefault();
// submit 전 내용 체크
console.log('check values before submit :: ', values);
// validation 체크
if (!values) {
alert('확인해주세요');
}
try {
// 1. axios 로 api 호출
const res = await axios.post('/api/signup', values);
// 2. api 호출 이후의 로직 작성
console.log('회원가입 성공:', res.data);
navigate('/login');
} catch (error) {
// 3. 에러 발생 시 메세지 노출
console.error('회원가입 실패:', error);
const errorMessage = error.res?.data?.message || '회원가입 중 오류가 발생했습니다.';
alert(errorMessage);
}
};
입력 시 입력값을 자동으로 객체에 반영하는 hook
import { useState } from 'react';
const useFormInput = (initialValues) => {
const [values, setValues] = useState(initialValues);
const handleChange = (event) => {
const { name, value, type, checked } = event.target;
setValues({
...values,
[name]: type === 'checkbox' ? checked : value,
});
};
const resetForm = () => setValues(initialValues);
return { values, handleChange, resetForm, setValues };
};
export default useFormInput;
const Login = () => {
// useFormInput 에서 사용할 함수 정의
const { values, handleChange, resetForm, setValues } = useFormInput({
nickname: '',
password: '',
email: ''
});
// 변경할 values 선언
const { nickname, password, email } = values; // 비구조화 할당
// setValues: value 할당
const login = async () => {
const res = await axios.post(`/api/member/login`);
console.log("res :: ", res);
setValues(res.data);
}
// resetForm: values 초기화
const resetValues = () => {
resetForm()
}
// handleChange: 입력값이 변경 될 때마다 values 객체 내 값 변경
return (
<input
type="text"
name="postTitle"
value={postTitle}
onChange={handleChange}
/>
);
}