: type="radio"은 HTML 폼 요소 중 하나로, 라디오 버튼을 생성하는데 사용됩니다. 라디오 버튼은 여러 옵션 중에서 사용자가 하나만 선택할 수 있는 선택지를 제공하는 입력 요소
[예시]
<input type="radio" id="option1" name="options" value="option1">
<label for="option1">Option 1</label>
<input type="radio" id="option2" name="options" value="option2">
<label for="option2">Option 2</label>
<input type="radio" id="option3" name="options" value="option3">
<label for="option3">Option 3</label>
여기에서 주요 속성은 다음과 같습니다:
[코드]
// 서버에서 받은 응답데이터를 token 필드를 추출하여 token 변수에 저장(데이터는 일반적으로 JSON 형식으로 제공됨)
const { token } = response.data;
// 브라우저의 로컬스토리지에 token값을 저장
// 웹 브라우저에 데이터를 저장하는 방법 중 하나로 setItem 메서드를 사용하여 데이터를 키-값 쌍으로 저장
localStorage.setItem('token', token);//('key값',value값)
[코드]
const handleSignup = async () => {
if (!checkbox) {
window.alert('개인정보 수집 동의란에 체크해주세요');
return;
}
if (!gender) {
window.alert('성별을 선택해주세요');
return;
}
try {
const userData = {
email: email,
nickname: nickname,
gender: gender,
password: password,
};
// await이전의 코드가 실행되는 것을 기다리고 http 요청이 완료되고 응답이 잘 돌아온다면 다음 코드가 진행이됨 -> 동기적인 효과를 줌
await axios.post(`http://3.39.76.109:8080/members`, userData, {
headers: {
'Content-Type': 'application/json',
},
});
// Fetch 사용시
// const response = await fetch(`http://3.39.76.109:8080/members`, {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json',
// },
// body: JSON.stringify(userData),
// });
// const data = await response.json();
// const { token } = data;
// localStorage.setItem('token', token);
setNickname('');
setEmail('');
setPassword('');
setCheckbox(false); // 체크박스 초기값을 false로 설정
window.alert('회원가입이 완료되었습니다.');
window.location.href = '/members/login';
} catch (error) {
console.error('Error Signing up', error);
}
};
[코드]
export default function Signuppage() {
... 생략
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [emailerror, setEmailError] = useState('');
const [passwordError, setPasswordError] = useState('');
const handleGenderChange = (e) => {
setGender(e.target.value);
};
// 이메일 유효성 검사
const isEmailValid = (email) => {
const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return emailRegex.test(email);
};
const handleEmagilChange = (e) => {
setEmail(e.target.value);
// 이메일 유효성 검사 방식이 만족하지 못하면 해당 문구가 뜨고 만족하다면 해당 문구는 사라짐
if (!isEmailValid(email)) {
setEmailError('유효한 메일 형식이 아닙니다.');
} else {
setEmailError('');
}
};
... 생략
return (
<SignupPage>
<div className="signup-page-container">
...생략
<div className="signup-form-email">
<InputStyle
type="text"
id="email"
value={email}
placeholder="E-mail"
onChange={handleEmagilChange}
/>
{emailerror && <p className="emailerror-message">{emailerror}</p>}
</div>
...생략
</SignupPage>
);
}