// input 영역 value 가져오기
const [userId, setUserId] = useState({userid: ""});
const [userPw, setUserPw] = useState({userpw: ""});
const [userNickName, setUserNickName] = useState({usernickname: ""});
// db 연결 handler
const onSubmitHandler = async () => {
axios.post('http://localhost:4001/users', userId, userPw, userNickName);
setUserId(userId);
setUserPw(userPw);
setUserNickName(userNickName);
}
// 새로고침 막아주고 db에 값을 저장한 후 초기값으로 돌려주기
const onSubmit = (e) => {
e.preventDefault();
onSubmitHandler();
}
// input value 값 넣기
const onChangeUserId = e => setUserId({userid: e.target.value});
const onChangeUserPw = e => setUserPw({userpw: e.target.value});
const onChangeUserNickName = e => setUserNickName({usernickname: e.target.value});
// UI
<label>회원가입</label>
<form onSubmit={onSubmit}>
<input onChange={onChangeUserId}
minLength={4}
maxLength={10}
value={userId.userid}
placeholder='아이디(4~10글자)' />
<input onChange={onChangeUserPw}
minLength={4}
maxLength={15}
type="password"
value={userPw.userpw}
placeholder='비밀번호(4~15글자)' />
<input onChange={onChangeUserNickName}
minLength={1}
maxLength={10}
value={userNickName.usernickname}
placeholder='닉네임(1~10글자)' />
<button type="submit">회원가입</button>
</form>
// 회원가입 시 input value state
const [joinInput, setJoinInput] = useState({
userid: "",
userpw: "",
usernickname: ""
});
// input value 값 가져오기
const onChangeJoinInput = e => {
// e.target을 name과 value로 구조분해 할당
const {name, value} = e.target
setJoinInput({
...joinInput,
// input에 부여된 name을 value로 지정
[name]: value,
});
};
// db 연결 handler(회원가입 시 db에 값 넣어주기): try-catch 사용
const onSubmitdoSignUpHandler = async () => {
try {
const {data} = await axios.post(
'http://localhost:4001/register',
joinInput,
)
console.log(data)
} catch (error) {
console.log(error)
}
};
// 새로고침 막아주고 db에 값을 저장
const onSubmitdoSignUp = (e) => {
e.preventDefault();
onSubmitdoSignUpHandler();
}
// UI - input name을 value의 key 이름과 일치시켜준다.
<form onSubmit={onSubmitdoSignUp}>
<input onChange={onChangeLogJoinInput}
minLength={4}
maxLength={10}
name="userid"
placeholder='아이디(4~10글자)'
required />
<input onChange={onChangeLogJoinInput}
minLength={4}
maxLength={15}
name="userpw"
type="password"
placeholder='비밀번호(4~15글자)'
required />
<input onChange={onChangeLogJoinInput}
minLength={1}
maxLength={10}
name='usernickname'
placeholder='닉네임(1~10글자)'
required />
<button type="submit">회원가입</button>
</form>
출처: https://velog.io/@0seo8/React-Json-server-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84
<input onChange={onChangeLogJoinInput}
minLength={4}
maxLength={10}
name="userid"
placeholder='아이디(4~10글자)'
required />
출처: https://www.tcpschool.com/html-tag-attrs/input-required
// styled-component 사용
const InputStyle = styled.input`
height: 2rem;
background-color: transparent;
border-width: 0 0 0.1rem;
outline: none;
&:valid:focus {
border-width: 0 0 0.1rem;
box-shadow: 0 0.1rem 0 0 rgb(151, 229, 138);
border-color: rgb(128, 221, 21);
transition: 0.5s;
}
&:invalid:focus {
border-width: 0 0 0.1rem;
box-shadow: 0 0.1rem 0 0 rgb(255, 177, 177);
border-color: red;
transition: 0.5s;
}
`;
출처: https://velog.io/@planic324/CSS-valid-invalid-%EB%9E%80
warning: in the working copy of 'db.json',
LF will be replaced by CRLF the next time Git touches it
여러 글 들을 봤지만, 아래에 표기해둘 출처에 너무나 간단명료하게 설명이 되어있어 더 간단하게 줄이거나 내 방식대로 수정할 필요도 없었다.. 여기서는 내가 필요한 부분만 가져와봤으니 더 자세한 내용은 아래 출처로 들어가보시길 :)
core.autocrlf 설정하기: Git에 코드를 커밋할 때 LF와 CRLF를 서로 변환해주는 기능
-> 시스템 전체에 적용할 것이라면 global 옵션을 추가해주고, 해당 프로젝트에만 적용한다면 제외하여 작성해주면 된다.
각각의 체제에 맞게 아래의 명령어를 선택하여 입력해준다.
$git config core.autocrlf true
$git config --global core.autocrlf true
$git config core.autocrlf input
$git config --global core.autocrlf input
$git config --global core.autocrlf false
그.. 정말... 기능을 하나 구현할 때 마다 수십개의 error와... 빨간 화면을 마주하게 되는데.. 해결해나가는 과정이 재미있으면서도 이걸 해결하기 위해 계속 밤을 새니 체력은 날로 떨어지는 것 같다😂