1. 1. 최종 완성 모습

2. 2. 어려웠던 점
2.1. 2-1. json server와 연결하기 위한 수정
데이터를 state에만 관리 했는데 json server를 사용해 목업서버에 데이터를 저장하게 수정을 하게 되었다.
근데 패치를 리덕스의 과정 중 어디에 넣어야할지 잘 모르겠어서 어려웠다.
해결방안
fetch 함수-> 응답 -> 데이터 가공 -> dispatch-> action-> reducer 순으로 작성했다.
좀 더 알아 보니깐 일반적으로 미들웨어, redux-thunk를 사용해서 비동기 작업을 하는 것 같다.. 나중에 시간되면 다시 수정해야할 것 같다ㅜ
2.1.1. 2-2. josn server의 patch
ptach 메서드로 데이터를 보내니깐 응답이 `{}`으로 왔다.
해결방안
바디에 데이터를 잘 못 보내서 발생한 문제였다. 전체 데이터를 보내는 것이 아니라, 수정할 부분만 보내면 수정한 전체 데이터가 응답으로 오는 것이 였다.
<javascript />
function check(data) {
// 파라미터로 바꿀 데이터의 id
fetch(`http://localhost:3001/todo/` + data.id, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
},
// 수정할 부분만 보내주기
body: JSON.stringify({"done": !data.done}),
})
.then((res) => {
return res.json()
})
.then(data => {
dispatch(toDo(data))
})
.catch((error) => {
console.error('Error', error);
});
}
2.1.2. 2-3. 엔터 입력으로 서버에 데이터 전송하기

할 일 내용을 엔터로 입력하면, 줄바꿈(`\n`)이 같이 서버에 전달 되었다.
그리고 입력창에도 줄바꿈이 보이고 나서 모달 창이 닫혔다.
해결방안
`onKeyDown` 사용해서 이벤트의 기본 동작을 막아 주었다.
처음에는 `onKeyUp`에 추가해봤는데 아무 효과 없었다. 아마 `onKeyUp`은 이미 입력이 된 상태라서 그런것 같다.
<javascript />
<textarea
placeholder="할 일을 입력 후, Enter를 눌러주세요"
onChange={(e) => setInput(e.target.value)}
onKeyUp={(e) => e.code === 'Enter' && add()}
onKeyDown={e => e.code === 'Enter' && e.preventDefault()}
value={input}
></textarea>
`onChange`: 입력 요소의 value 속성값이 변경된 후에 호출
`onKeyUp`: 이벤트 핸들러는 키를 떼는 순간 호출 (텍스트의 길이를 제한)
`onKeyDown`: 이벤트 핸들러는 키를 누르는 순간 호출 (특정 키 입력을 막기)
2.1.3. 2-4. 메뉴 모달 고정하기
메뉴를 오른쪽에 위치 시키고 싶은데 생각대로 움직이지 않았다.
해결방안
부모요소를 기준으로 `position: absolute` 사용하고 싶으면 부모 요소에 `relative`를 정의해줘야한다.
2.1.4.
2.1.5. 마치며..
생각보다 css가 어려웠다.. ㅜ 애니메이션도 하나도 못 넣은 부분이 많이 아쉽다.
그래도 시간안에 완성했다는데 의의를 두기로 했다.
기능 추가하고 싶고 코드도 너무 더러워서 정리하고 싶은데 프로젝트가 시작해서 가능할 지 모르겠다.
기능 추가는 못하더라도 미들웨어 공부해서 패치부분은 수정해봐야겠다. 너무 컴포넌트안에서 패치했더니 너무 지저분해 보인다.
To Do List 만들기
두개가 겹치는 상황이 발생상태를 하나 두고 거짓을 때 입력상 사실일때 수정창 나오게 구성처음에 usestate로 사용하다가 수정하기 눌렀을 때 입력창이 나타나야하는데 입력창 상태를 수정하기
velog.io
'React' 카테고리의 다른 글
Redux Thunk 미들웨어 사용해보기 (0) | 2023.04.11 |
---|---|
리액트로 달력만들기 (0) | 2023.04.08 |
Proxy (0) | 2023.04.04 |
Custom Hook (0) | 2023.03.27 |