반응형
HTML 카테고리에 넣으려 했는데, 생각해보니 HTML로 이런 오류를 만나진 않을 것 같고 나도 리액트하다가 마주친 오류이기 때문에
리액트 카테고리에 작성함
타입스크립트를 연습하면서 todolist를 만드는 도중, 엔터키를 쳤을때 form에서 submit이 안되는 현상이 있었다.
form하나에 button이 2개인데, button의 타입을 명시하지 않았기 때문
내 리액트 tsx 코드는 이렇다.
const AddNewModal: React.FC<Props> = ({ onClick, newTodo, setNewTodo, addNewTodo }) => {
..(생략)..
return (
<form onSubmit={(e) => submitFunction(e)}>
<button onClick={onClick}>나가기</button>
<input type="text" value={newTodo} onChange={(e) => setNewTodo(e.target.value)}></input>
<button type="submit">할 일 추가</button>
</form>
);
};
submit이 안되었던 이유는 '나가기'버튼의 type이 정해져 있지 않아, form태그 내부에서의 기본값인 submit으로 되어있었기 때문이다.
아래 참고자료 두글을 보고 아래와 같이 바꾸니 해결되었다.
해결책 1 : button 의 type을 명시하기
나가기 버튼의 type은 button,
할 일 추가 버튼의 type은 submit
명시하기
return (
<form onSubmit={(e) => submitFunction(e)}>
<button type="button" onClick={onClick}>
나가기
</button>
<input type="text" value={newTodo} onChange={(e) => setNewTodo(e.target.value)}></input>
<button type="submit">할 일 추가</button>
</form>
);
해결책2 : form태그 1개에 button 1개만 넣어주기
또다른 방법으로 아래처럼 form 태그 1개에 button 1개만 넣어주는 방법도 있다.
return (
<>
<form onSubmit={(e) => submitFunction(e)}>
<input type="text" value={newTodo} onChange={(e) => setNewTodo(e.target.value)}></input>
<button>할 일 추가</button>
</form>
<button onClick={onClick}>나가기</button>
</>
);
결과
submit이 잘 된다.
참고자료
http://tcpschool.com/html-tag-attrs/button-type
반응형
'개발 > React' 카테고리의 다른 글
classnames 라이브러리 (0) | 2022.02.15 |
---|---|
Create-react-app 에러 : You are running `create-react-app` 4.0.3, which is behind the latest release (5.0.0). (0) | 2022.02.11 |
클라이언트단에서 crypto-js 를 이용하여 유저정보 암호화하기 (0) | 2022.01.16 |
useEffect 특징 (0) | 2022.01.01 |
리액트에서 불변성이 중요한 이유 (0) | 2021.12.31 |